【发布时间】:2015-09-17 11:44:25
【问题描述】:
我是 android 开发的新手,也许这是一个愚蠢的问题,但请帮助我。我在尝试保存 int 值时遇到此错误。
原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)'
这是我的代码
SharedPreferences prefs = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);
String value = "com.example.app.value";
int i = prefs.getInt(value, 0);
对于写
prefs.edit().putInt(number, i).apply();
我只想设置一个 SharedPreferences 并想首先阅读它并将其写入 Activity 中。我该如何解决?
编辑
public class MainActivity extends Activity {
SharedPreferences sharedpreferences;
public static final String MyPREFERENCES = "myprefs";
public static final String value = "key";
int i = sharedpreferences.getInt(value, 0);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
}
public void sendMessage(View view) {
i += 1;
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putInt(value, i);
editor.apply();
}
我设法用不同的方式保存了首选项,但我无法在 MainActivity extends Activity 类中读取它。
日志:
原因:java.lang.NullPointerException:尝试在空对象引用上调用接口方法“int android.content.SharedPreferences.getInt(java.lang.String, int)”
【问题讨论】:
-
SharedPreferences prefs = yourActivity.this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE); -
^ yourActivity.this.getSharedPreferences() 与直接调用 getSharedPreferences() 相比没有效果,因为提供的代码已经在活动中;如果您在实用程序类中,您只会这样做(在这种情况下,直接调用 getSharedPreferences() 甚至不会编译)。此外,硬编码包名(这是一个魔术字符串)也是不好的做法,而是调用 getPackageName()。