如何在启动时从另一个 activity 正确加载已保存的 SharedPreferences?
How to correctly load saved SharedPreferences from another activity on startup?
我认为我捕获的错误只是第一次 运行ning(仍然没有 SharedPreferences
保存,但每次我 运行应用程序(在 MainActivity
中):
Attempt to invoke virtual method 'int com.android.test.helper.PreferencesHelper.load(java.lang.String)' on a null object reference
然而,相同的函数起作用并在保存该选项的 OptionsActivity
中成功加载 key
(key_foo
) 下的值。 MainActivity
运行 第一次打开应用程序时立即被 OptionsActivity
取代。
MainActivity.java
:
public class MainActivity {
private PreferencesHelper preferencesHelper;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
preferencesHelper.load("key_foo");
recreate();
}
catch(Exception e) {
Log.d("ERROR", e.getMessage());
}
startOptionsActivity();
}
}
PreferencesHelper.java
:
public class PreferencesHelper {
private Activity context;
private SharedPreferences sharedPref;
private SharedPreferences.Editor editor;
public PreferencesHelper (Activity activity){
context = activity;
sharedPref = context.getSharedPreferences("file", 0);
}
public int load(String key){
sharedPref = context.getSharedPreferences("file", 0);
return sharedPref.getInt(key, -1);
}
public void save(String key, int value){
editor = sharedPref.edit();
editor = putInt(key, value);
editor.apply();
}
}
OptionsActivity.java
:
public class OptionsActivity {
private PreferencesHelper preferencesHelper;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_options);
preferencesHelper.save("key_foo", 42);
recreate();
try {
preferencesHelper.load("key_foo");
}
catch(Exception e) {
Log.d("ERROR", e.getMessage());
}
}
}
Attempt to invoke virtual method 'int
com.android.test.helper.PreferencesHelper.load(java.lang.String)' on a
null object reference
NullPointerException 当程序尝试使用具有 null
值的对象引用时抛出。您必须在 onCreate()
部分声明 PreferencesHelper
。
private PreferencesHelper preferencesHelper;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
preferencesHelper = new PreferencesHelper(this);
我认为我捕获的错误只是第一次 运行ning(仍然没有 SharedPreferences
保存,但每次我 运行应用程序(在 MainActivity
中):
Attempt to invoke virtual method 'int com.android.test.helper.PreferencesHelper.load(java.lang.String)' on a null object reference
然而,相同的函数起作用并在保存该选项的 OptionsActivity
中成功加载 key
(key_foo
) 下的值。 MainActivity
运行 第一次打开应用程序时立即被 OptionsActivity
取代。
MainActivity.java
:
public class MainActivity {
private PreferencesHelper preferencesHelper;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
preferencesHelper.load("key_foo");
recreate();
}
catch(Exception e) {
Log.d("ERROR", e.getMessage());
}
startOptionsActivity();
}
}
PreferencesHelper.java
:
public class PreferencesHelper {
private Activity context;
private SharedPreferences sharedPref;
private SharedPreferences.Editor editor;
public PreferencesHelper (Activity activity){
context = activity;
sharedPref = context.getSharedPreferences("file", 0);
}
public int load(String key){
sharedPref = context.getSharedPreferences("file", 0);
return sharedPref.getInt(key, -1);
}
public void save(String key, int value){
editor = sharedPref.edit();
editor = putInt(key, value);
editor.apply();
}
}
OptionsActivity.java
:
public class OptionsActivity {
private PreferencesHelper preferencesHelper;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_options);
preferencesHelper.save("key_foo", 42);
recreate();
try {
preferencesHelper.load("key_foo");
}
catch(Exception e) {
Log.d("ERROR", e.getMessage());
}
}
}
Attempt to invoke virtual method 'int com.android.test.helper.PreferencesHelper.load(java.lang.String)' on a null object reference
NullPointerException 当程序尝试使用具有 null
值的对象引用时抛出。您必须在 onCreate()
部分声明 PreferencesHelper
。
private PreferencesHelper preferencesHelper;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
preferencesHelper = new PreferencesHelper(this);