在android中使用共享首选项尝试保存字符串但在null对象上获取错误作为空点异常

时间:2016-03-10 11:50:26

标签: java android sharedpreferences

在android中使用共享首选项尝试从主活动中保存字符串并尝试从另一个活动中获取共享首选项字符串。 提前谢谢。

Gcm.setGCM("some text to save");

但是得到错误:

错误:

java.lang.NullPointerException: Attempt to invoke interface method 'android.content.SharedPreferences$Editor android.content.SharedPreferences$Editor.putString(java.lang.String, java.lang.String)' on a null object

Gcm.java

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

public class Gcm {

    public static SharedPreferences pref;
    private static Context ctx;

    public Gcm(Context context){

        pref = context.getSharedPreferences("gcm", context.MODE_PRIVATE);
        ctx = context;
    }


    public static String getGCM(){
        return pref.getString("gcmid", "none");

    }


    public static void setGCM(String gcmid)
    {
        System.out.println("gcmid->"+gcmid);
        pref.edit().putString("gcmid", gcmid).commit();
    }

    public static void removeGCM(){

        pref.edit().putString("gcmid", "none").commit();
    }

}

3 个答案:

答案 0 :(得分:1)

您正在从Gcm类调用静态方法,而不创建该类的实例。这样,Gcm的构造函数永远不会被调用,导致NullPointerException,因为pref中的setGCM()永远不会被实例化。

你要么

Gcm mGcm = new Gcm(context);
mGcm.setGcm("some text to safe");

或者你把那个班级写成一个单身人士并且做

Gcm.getInstance().setGcm("some text to safe");

如果您不知道如何撰写单身人士,谷歌会提供帮助。这是一种常见的模式。

答案 1 :(得分:0)

在这里查看我的答案。

SharedPreferences helper class

它是Sharedpreferences的助手类。

答案 2 :(得分:0)

更新以下方法:

public static void setGCM(String gcmid)
{
 System.out.println("gcmid->"+gcmid);
  if(pref==null){
    pref = ctx.getSharedPreferences("gcm", context.MODE_PRIVATE);
  }
 pref.edit().putString("gcmid", gcmid).commit();
}

希望这会对你有所帮助