android - 在 Application 类中获取 sharedPreferences 时的 NullPointer

标签 android

public static final String PREFS_NAME = "MyPrefsFile";
private SharedPreferences settings;
settings = getSharedPreferences(PREFS_NAME, 0);

当我在扩展应用程序的类中使用此代码时,我在第 3 行获得了一个空指针,而当我在 Activity 中执行相同操作时它仍然有效。这是为什么?

我正在尝试创建一个单例类来保存一些变量。只有 10 个变量,所以不足以使用 sqllite 左右。

编辑: 在我的第一次调用中,我得到了一个 DataClass 单例实例:

   boolean active = DataClass.getInstance().getBoolean("active");

完整的数据类:

import android.app.Application;
import android.content.SharedPreferences;
import android.util.Log;


public class DataClass extends Application  {
    public static final String PREFS_NAME = "MyPrefsFile";

    private static DataClass instance = null;
    public static DataClass getInstance() {
          if(instance == null) {
             instance = new DataClass();
          }
          return instance;
       }


    private SharedPreferences settings;

    public DataClass()  {
        settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);  //nullpointer here
        Log.e("temp", "DataClass constructor executed");
    }


    public void setBoolean(boolean trueorfalse, String id)      {
        SharedPreferences.Editor editor = settings.edit();
        editor.putBoolean(id, trueorfalse);
        editor.commit();
    }

    public boolean getBoolean(String id)        {
        return settings.getBoolean(id, false);
    }

}

编辑:添加堆栈跟踪:

04-15 09:28:25.064: ERROR/AndroidRuntime(16943): FATAL EXCEPTION: main
04-15 09:28:25.064: ERROR/AndroidRuntime(16943): java.lang.RuntimeException: Unable to start activity ComponentInfo{be.test.helloworld/be.test.helloworld.activities.MainActivity}: java.lang.NullPointerException
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2781)
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2797)
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):     at android.app.ActivityThread.access$2300(ActivityThread.java:135)
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2132)
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):     at android.os.Looper.loop(Looper.java:143)
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):     at android.app.ActivityThread.main(ActivityThread.java:4914)
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):     at java.lang.reflect.Method.invokeNative(Native Method)
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):     at java.lang.reflect.Method.invoke(Method.java:521)
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):     at dalvik.system.NativeStart.main(Native Method)
04-15 09:28:25.064: ERROR/AndroidRuntime(16943): Caused by: java.lang.NullPointerException
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):     at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:146)
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):     at be.test.helloworld.data.DataClass.<init>(DataClass.java:23)
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):     at be.test.helloworld.data.DataClass.getInstance(DataClass.java:14)
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):     at be.test.helloworld.activities.MainActivity.onCreate(MainActivity.java:29)
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1065)
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2745)
04-15 09:28:25.064: ERROR/AndroidRuntime(16943):     ... 11 more

最佳答案

Application 子类的 onCreate() 中调用它

关于android - 在 Application 类中获取 sharedPreferences 时的 NullPointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5673526/

相关文章:

java - 如何使用 FileReader 引用我的原始 txt 文件?

android - 在运行时检查 Android 构建项目目标 API 级别

java - 对于大致相同时间 : multiple Handlers with single Runnable each, 的指令或具有多个 Runnable 的单个 Handler 来说,哪个更好?

android - 单击 EditText 时提示不会消失

javascript - google analytics - 将事件/标签作为对象而不是字符串发送

android - 动态更改 ListView 中 TextView 的文本颜色?

android - Android 中自动调整文本大小

android - Osmdroid 4.3 - 双击叠加层

c# - 如何防止 Android 中页面转换之间出现白屏?

java - Android 的简单日期选择器