我发布了我的应用程序,发现有时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);
}
答案 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);
}
}