15

同じアプリケーション内ですが、別のパッケージ内にあるアクティビティで次の行を実行しています。

AppObject appObj = (AppObject)this.getApplication();
// FYI: AppObject is my extension class of Application.

nullポインターのみを返しますが、「メイン」パッケージに移動してそこから実行すると、期待どおりにアプリケーション参照が返されます。

別のパッケージにあるため、完全修飾クラス名を使用して AndroidManifest.xml でアクティビティを定義しました。<activity android:name="com.foo.bar.TestActivity"></activity>


更新:以下の質問で示唆されているようandroid:name="AppObject"に、既に<application>AndroidManifest.xml のタグに含まれていました

4

4 に答える 4

28

getApplication()コンストラクターではなく、アクティビティのonCreate()メソッドで呼び出すことが重要です。

于 2011-05-10T06:47:12.693 に答える
4

アプリケーションから拡張されたクラス名と適切なパッケージ名を使用して、 AndroidManifest.xml への更新アプリケーション タグが必要です。

<application android:name=".AppObject">


Application tag google docs に従って、グローバルなアプリケーションの状態を維持する必要がある人のための基本クラス。AndroidManifest.xml のタグでその名前を指定することにより、独自の実装を提供できます。これにより、アプリケーション/パッケージのプロセスが作成されるときに、そのクラスがインスタンス化されます。

ここ

于 2009-10-09T18:03:08.007 に答える
1

すべてのコードをリファクタリングしても同じ問題が発生しましたが、同じ問題に遭遇しmApplicationました。コンストラクターでローカル変数を設定していたことに気付きましたonCreate()。コールインまたはコールされた後getApplication()にコールする必要があるようにセットアップします。これがさまざまなパッケージで機能するかどうかを確認するために、すべてのコードを再度リファクタリングしていません (ため息)。getApplication()onCreate()

于 2011-01-17T15:04:23.610 に答える