【问题标题】:Android java : null context in a class that extend ApplicationAndroid java:扩展应用程序的类中的空上下文
【发布时间】:2015-04-29 14:54:08
【问题描述】:

我有一个扩展应用程序的类。当我尝试使用“getApplicationContext”或使用“getBaseContext”获取该类的上下文时,上下文始终为空。

我需要上下文才能使用“getSharedPreferences”。

打印的错误是:

原因:java.lang.NullPointerException 在 android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109)

我做错了什么或者我可以在没有上下文的情况下使用“getSharedPreferences”的其他方式(如果可能的话)?

感谢您的帮助。

用一些代码编辑:

我正在我的主类中初始化类“DeviceInfo”。 “DeviceInfo”类扩展了应用程序。在它的构造函数中我试图做:

protected DeviceInfo() {

        context = getApplicationContext();
}

wich 给了我前面提到的同样的错误。

这是给我带来麻烦的主线......

SharedPreferences key = getApplicationContext().getSharedPreferences("keys", Context.MODE_PRIVATE);

最终编辑:谢谢大家,我接受了你们的所有意见,并意识到我的做法完全不对。我更改了所有代码,现在它可以工作了,再次感谢。

【问题讨论】:

  • 请分享您的代码!
  • 您是在 onCreate() 之外还是之前调用该方法?
  • 从哪里调用方法 getApplicationContext() ?
  • 我编辑了我的问题,我尝试使用“this”代替,同样的错误。我也不能在 OnCreate 中调用它,因为我的类扩展了 Application 而不是 Activity,但我可能错了
  • 'this' 不会有任何帮助。 'this' 是隐含的。

标签: java android android-context


【解决方案1】:

您的问题是您的应用程序的Context 在您尝试访问它之前尚未创建。为确保您的Context 已创建,您应该等待访问您的Context 直到onCreate(),然后再尝试访问您的上下文对象。

例如:

public class DeviceInfo extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        SharedPreferences key = getApplicationContext().getSharedPreferences("keys", Context.MODE_PRIVATE);
    }

}

您也可以使用PreferenceManager.getDefaultSharedPreferences(getApplicationContext()) 访问默认首选项文件。

【讨论】:

  • 永远不会调用 onCreate 函数,我不明白为什么
  • 您是否在 Android 清单中定义了应用程序的名称?
  • 我不能,因为我已经有一个扩展应用程序的类
  • 您在原始帖子中说“DeviceInfo”扩展了应用程序。
【解决方案2】:

每当您创建一个扩展Application 的类时,您必须在AndroidManifest.xml 文件内的application 标记内定义android:name=".YourClass" 属性。

【讨论】:

  • 不管怎样,你现在有两个从 Application 扩展而来的类?
猜你喜欢
  • 1970-01-01
  • 2012-10-01
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 2021-03-17
相关资源
最近更新 更多