Android:SharedPreferences有时会导致NullPointException错误

时间:2019-06-30 05:04:44

标签: java android sharedpreferences

我发布了我的应用程序,发现有时SharedPreferences会导致NullPointException几次。通常,它运作良好。我仍然不知道错误的原因和原因。

我的代码和日志是这样的。

Activity

protected void onCreate(...) {
    super.onCreare(savedInstanceState);
    setContentView(R.layout.activity_layout);

   // NullPointException here
    ASharedPreferences.saveCurrentNumber();
    ASharedPreferences.getCurrentNumber();
}

ASharedPreferences.java

public class ASharedPreferences {

    private static final String PREF_NAME = 'Number';
    private static ASharedPreferences sInstance;
    private static SharedPreferences sSharedPref;
    private static SharedPreferences.Editor sEditor;

    private ASharedPreferences(Context context) {
        sSharedPref = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
        sEditor = sSharedPref.edit();
    }


    public static void init(Context context) {
        if (sInstance == null) {
            sInstance = new ASharedPreferences(context);
        }
    }

    public static void saveCurrentNumber() {
        sEditor.putInt("current_number", getCurrentNumber() + 1);
        sEditor.apply();
    }

    public static int getCurrentNumber() {
        return sSharedPref.getInt("current_number", 0);
    }

}

日志在这里。但这似乎没用。

  

原因:java.lang.NullPointerException:

     

在com ... ASharedPreferences.getCurrentNumber(ASharedPreferences.java:30)

     

在com.ASharedPreferences.saveCurrentNumber(ASharedPreferences.java:25)

     

在com ... Activity.onCreate(Activity.java:63)

为什么即使将其设置为默认值也会导致NullPointException?

可能是什么原因?

更新

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ASharedPreferences.init(this);
}

1 个答案:

答案 0 :(得分:0)

尝试这种方法,而不是创建类的实例。

protected void onCreate(...) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_layout);

   // NullPointException here
    ASharedPreferences.saveCurrentNumber(MyActivity.this);
    int n=ASharedPreferences.getCurrentNumber(MyActivity.this);
}
public class ASharedPreferences {

    private static final String PREF_NAME = 'Number';

    public static void saveCurrentNumber(Context context) {
        SharedPreferences sSharedPref=context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
       SharedPreferences.Editor sEditor=sSharedPref.edit();
        sEditor.putInt("current_number", getCurrentNumber(context) + 1);
        sEditor.apply();
    }

    public static int getCurrentNumber(Context context) {
       SharedPreferences sSharedPref=context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
       SharedPreferences.Editor sEditor=sSharedPref.edit();
        return sSharedPref.getInt("current_number", 0);
    }

}