2012-01-04 11 views
1

'this'キーワードが自分のアプリケーションのメインJavaファイルonCreateメソッドでのみ機能する理由はありますか?'this'キーワードを別のクラスファイルで使用する

どこでも「this」を試してみると、nullPointerExceptionエラーが発生します。例えば

、作業バージョン:

public class HelloAndroid extends Activity { 

public void onCreate(Bundle icicle) { 

    super.onCreate(icicle); 
    XmlParser xmlParse = new XmlParser(); 
    encounterText = xmlParse.parseXML(this); 

} 

しかし、私は試してみて、私のアプリ内で別々のJavaクラスファイルに「この」を使用している場合、私はNPEを取得します。

ありがとうございます。

+0

NPEにスタックトレースとコード例を含めることはできますか? – elijah

+0

例外が発生した場所の例を投稿できますか? –

+0

おそらく 'this'はnullではありません。 [この質問](http://stackoverflow.com/q/3789528/324625)を参照してください。他の人が言っているように、動作するコードではなく、壊れたコードを投稿してください。 –

答えて

1

私は間違っていると私に訂正してくれます。なぜなら、 'this'はコンテキストへの参照を必要とするメソッドの引数として機能しないのです。これは、アクティビティを拡張するクラスのコンテキストのみを参照するということです。あなたの活動はあなたのコンテキストでもあるので、これらのインスタンスでは機能します。しかし、あなた自身のクラスを宣言するとき、あなたはもはやアクティビティ内にいないので、 'this'(明らかにあなたのクラスを参照しています)は、コンテキストへの参照を得るのに役立ちません。

これらの状況では、そのオブジェクトにアクセスできるように、クラスコンストラクタへの参照としてコンテキストを渡す必要があります。

+0

'Context'を期待しているものに' Context'を渡してNPEを与える方法はありません。 'ClassCastException'はおそらく... –

1

「this」は、クラスのインスタンスを参照しています。 onCreateメソッドに固有のものではありません

+0

静的メソッドで使用すると、コンパイル時にエラーが発生します。 –

+0

静的メソッドで 'this'を使うことは、コンパイルすべきではありません。 – Argyle

1

すべてのクラスインスタンスにはそれぞれ 'this'リファレンスがあります。 'これは実際にHelloAndroidインスタンスの例で宣言したクラスのインスタンスを意味します。あなたの例では、解析ハンドラと同じクラスを使用しています。なぜなら、別のクラスでDefaultHandlerを定義している可能性があるからです。

関連する問題