我正在使用SharedPreferences获取一些保存的值。我只在某些设备上获得空指针异常。当我在自己的设备中测试代码时,我没有遇到任何问题。但是我的一些用户得到了错误。
这是获取SharedPreference值的类:
public class SavingData {
public static final String PREFS_NAME = "MyPrefsFile";
public static MainActivity mainActivity;
public static int getRestTime() {
// Restore preferences
SharedPreferences settings = mainActivity.getSharedPreferences(PREFS_NAME, 0);
int restTime = settings.getInt("resttime", defaultRestTime); // 0 is the default
// value
return restTime;
}
在我的主类中,我声明了mainActivity变量。
SavingData.mainActivity = this;
这是我得到的错误:
java.lang.RuntimeException:无法启动活动
ComponentInfo {com.playsimple.fitnessapp / com.playsimple.fitnessapp.ExerciseStartActivity}: java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2198) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257) 在android.app.ActivityThread.access $ 800(ActivityThread.java:139)at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1210) 在android.os.Handler.dispatchMessage(Handler.java:102)at android.os.Looper.loop(Looper.java:136)at android.app.ActivityThread.main(ActivityThread.java:5086)at java.lang.reflect.Method.invokeNative(Native Method)at java.lang.reflect.Method.invoke(Method.java:515)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)at dalvik.system.NativeStart.main(Native方法)引起: java.lang.NullPointerException at com.playsimple.fitnessapp.data.SavingData.getDifficulty(SavingData.java:91) 在 com.playsimple.fitnessapp.ExerciseStartActivity.initExercise(ExerciseStartActivity.java:69) 在 com.playsimple.fitnessapp.ExerciseStartActivity.onCreate(ExerciseStartActivity.java:64) 在android.app.Activity.performCreate(Activity.java:5248)处 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162) ComponentInfo {com.playsimple.fitnessapp / com.playsimple.fitnessapp.ExerciseStartActivity}: java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 在android.app.ActivityThread.access $ 1500(ActivityThread.java:117)at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:931)at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:130)at android.app.ActivityThread.main(ActivityThread.java:3683)at java.lang.reflect.Method.invokeNative(Native Method)at java.lang.reflect.Method.invoke(Method.java:507)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:889) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:647)at dalvik.system.NativeStart.main(Native方法)引起: java.lang.NullPointerException at com.playsimple.fitnessapp.data.SavingData.getDifficulty(SavingData.java:91) 在 com.playsimple.fitnessapp.ExerciseStartActivity.initExercise(ExerciseStartActivity.java:69) 在 com.playsimple.fitnessapp.ExerciseStartActivity.onCreate(ExerciseStartActivity.java:64) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
答案 0 :(得分:1)
您正在此处创建主要活动的实例:
public static MainActivity mainActivity;
然后使用它调用共享Prefs ..从主活动中获取上下文对象,然后调用它。 也可以使用它包括MODE_PRIVATE参数:
SharedPreferences userDetails = context.getSharedPreferences("userdetails", MODE_PRIVATE);
见this detailed answer。 另请参阅[Context getSharedPreferences](http://developer.android.com/reference/android/content/Context.html#getSharedPreferences(java.lang.String,int))
的文档答案 1 :(得分:0)
尝试从其他活动中调用您的sharedPreferences,
SharedPreferences settings = mainActivity.getSharedPreferences(PREFS_NAME, MODE_PRIVATE);