如果android应用程序没有崩溃,我无法使用SharedReferences
我一进入使用此部件的活动,应用程序就会崩溃。根据logcat,这个代码块中的第一行给出了一个nullpointerException。如果重要的话,这部分在OnCreate之后,我使用的是Android Studio如果android应用程序没有崩溃,我无法使用SharedReferences,android,Android,我一进入使用此部件的活动,应用程序就会崩溃。根据logcat,这个代码块中的第一行给出了一个nullpointerException。如果重要的话,这部分在OnCreate之后,我使用的是Android Studio SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = pref.edit(); float hi
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = pref.edit();
float highscore = pref.getFloat("highscore",0.0f);
原因:
您可能正在使用来自片段或其他线程的代码。您需要将活动上下文引用作为参数传递。这就是问题所在
解决方案:
您需要将活动/上下文作为参数传递
Logcat:FATAL EXCEPTION: main
Process: com.nonexistent.rs.guessthenumber, PID: 4388
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.nonexistent.rs.guessthenumber/com.nonexistent.rs.guessthenumber.main}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
at android.app.ActivityThread.access$900(ActivityThread.java:175)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5602)
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:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:185)
at com.nonexistent.rs.guessthenumber.main.<init>(main.java:141)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1208)
at android.app.Instrumentation.newActivity(Instrumentation.java:1067)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2297)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
at android.app.ActivityThread.access$900(ActivityThread.java:175)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5602)
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:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
07-14 10:17:04.616 6030-6030/com.nonexistent.rs.guessthenumber E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.nonexistent.rs.guessthenumber, PID: 6030
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.nonexistent.rs.guessthenumber/com.nonexistent.rs.guessthenumber.main}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
at android.app.ActivityThread.access$900(ActivityThread.java:175)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5602)
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:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:185)
at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:369)
at com.nonexistent.rs.guessthenumber.main.<init>(main.java:142)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1208)
at android.app.Instrumentation.newActivity(Instrumentation.java:1067)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2297)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
at android.app.ActivityThread.access$900(ActivityThread.java:175)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5602)
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:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
很久以前我自己解决了这个问题,但后来我意识到这个问题没有得到回答。显然,我应该把所有SharedReferences代码放在onCreate中 你能指出得到空指针的确切位置吗?如果可能,请添加完整代码。。如果您不理解崩溃的触发器,请发布整个Java堆栈跟踪。我不认为我需要完整的代码,因为去掉代码片段可以解决问题。您是否尝试确定是哪个值导致空指针异常?您可以发布整个.java文件吗?这是什么课?没用。我仍然会遇到同样的错误,然后崩溃。好吧,你到底在哪里使用代码?在活动或其他线程实体上?是否定义了默认共享首选项,如PreferenceManager.SetDefaultValues?问题在于根据堆栈跟踪的上下文。因此,请尝试传递getApplicationContext作为替换此/Activity\u name的参数。这是如何设置DefaultValue的?这不是真的。您可以在任何地方使用共享首选项。您是否尝试过使用应用程序上下文。我指的是实际定义SP的部分。出于某种原因,当我将其移动到onCreate时,我没有收到任何错误。
SharedPreferences pref =
PreferenceManager.getDefaultSharedPreferences(Your_Activity_Name.this);