1

我创建了一个使用SharedPreferences. 在我的Activity,我试图添加一个项目并得到以下错误......

06-05 17:01:53.950: E/AndroidRuntime(3488): FATAL EXCEPTION: main
06-05 17:01:53.950: E/AndroidRuntime(3488): java.lang.NullPointerException
06-05 17:01:53.950: E/AndroidRuntime(3488):     at com.xcxcxc.helpers.Prefs.init(Prefs.java:16)
06-05 17:01:53.950: E/AndroidRuntime(3488):     at com.xcxcxc.helpers.Prefs.addStringProperty(Prefs.java:30)
06-05 17:01:53.950: E/AndroidRuntime(3488):     at com.xcxcxc.usersadapter.SplashActivity$1.callback(SplashActivity.java:78)
06-05 17:01:53.950: E/AndroidRuntime(3488):     at com.xcxcxc.usersadapter.SplashActivity$1.callback(SplashActivity.java:1)

这是我处理SharedPreferences...的代码

import android.content.Context;
import android.content.SharedPreferences;

public class Prefs {

    public static final String STORAGE_NAME = "ApplicationPrefs";

    private static SharedPreferences settings = null;
    private static SharedPreferences.Editor editor = null;
    private static Context context = null;

    public static void init(Context cntxt) {
        context = cntxt;
    }

    private static void init() {
        settings = context.getSharedPreferences(STORAGE_NAME, 0);
        editor = settings.edit();
    }

    /* String values */
    public static void addStringProperty(String name, String value) {
        if (settings == null || editor == null) {
            init();
        }
        editor.putString(name, value);
        editor.commit();
    }

    public static String getStringProperty(String name) {
        if (settings == null || editor == null) {
            init();
        }
        return settings.getString(name, null);
    }
}

这是我在我的Activity...中调用的代码

Prefs.addStringProperty("client_id", "1JDkv9sdfj8sf63rjs");
4

4 回答 4

0

看起来上下文为空。在 addStringProperty(..) 之前设置上下文

Prefs.init(getApplicationContext());
Prefs.addStringProperty("client_id", "1JDkv9sdfj8sf63rjs");
于 2012-06-05T13:32:18.800 回答
0

context似乎是null。试着打电话

public static void init(Context cntxt)

第一的

于 2012-06-05T13:32:36.283 回答
0
settings = context.getSharedPreferences(STORAGE_NAME, 0);

此语句必须导致 NPE。
你如何以及在哪里调用init(Context cntxt)方法。

除非上下文对象被初始化,否则你会得到一个NPE. 先修好。

于 2012-06-05T13:32:36.403 回答
0

context可能是空的,这就是为什么你得到空指针异常:

private static void init() {
    settings = context.getSharedPreferences(STORAGE_NAME, 0);
    editor = settings.edit();
}

先调用public static void init(Context cntxt)或处理空值:

private static void init() {
    if(context != null){
       settings = context.getSharedPreferences(STORAGE_NAME, 0);
       editor = settings.edit();
    }
}
于 2012-06-05T13:32:36.897 回答