我在一个Activity中运行以下行,该行位于同一个应用程序中,但位于不同的包中:
AppObject appObj = (AppObject)this.getApplication();
// FYI: AppObject is my extension class of Application.
它只返回一个空指针,而当我将它移动到“main”包并从那里运行时,它会按预期返回应用程序引用。
我已在AndroidManifest.xml中使用完全限定的类名定义了活动,因为它位于另一个包中:<activity android:name="com.foo.bar.TestActivity"></activity>
更新:根据以下问题中的建议android:name="AppObject"
已经在AndroidManifest.xml的<application>
标记中
答案 0 :(得分:21)
在活动的getApplication()
方法中调用onCreate()
非常重要,而不是在构造函数中调用。
答案 1 :(得分:4)
您需要使用您的类名更新应用程序标记到AndroidManifest.xml,该类名称是从Application扩展的,具有正确的程序包名称。
<application android:name=".AppObject">
根据应用程序标记google docs,基类,适用于需要维护全局应用程序状态的用户。您可以通过在AndroidManifest.xml的标记中指定其名称来提供自己的实现,这将导致在创建应用程序/包的过程时为您实例化该类。
答案 2 :(得分:1)
刚刚遇到同样的事情,重构了我的所有代码仍然遇到了同样的问题,注意到我在构造函数中设置了本地mApplication
变量,它应该进入onCreate()
,我我认为清单中的所有对象可以在getApplication()
设置之前先构建,因此您需要在调用getApplication()
之后或之后调用onCreate()
。没有重新重构我的所有代码,看看它是否适用于不同的包(叹气)。
答案 3 :(得分:-2)
我认为,它不是null
指针,但您想要在类AppObject
中使用的函数可能是错误的。