我正在使用这样的代码在我的一个片段中使用 PpreferencesManager。
String userId = PreferenceManager.getDefaultSharedPreferences(getContext()).getString("userId", "");
它会导致上面调用的一些时间错误。我在堆栈流中搜索了许多问题,但无法解决。我的完整错误日志如下所示
FATAL EXCEPTION: main
Process: com.example.shayari, PID: 29366
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.support.v7.preference.PreferenceManager.getDefaultSharedPreferencesName(PreferenceManager.java:308)
at android.support.v7.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:303)
at com.example.shayari.material.QuotesListFragment.updateQuotesListServer(QuotesListFragment.java:252)
at com.example.shayari.material.QuotesListFragment.access$900(QuotesListFragment.java:45)
at com.example.shayari.material.QuotesListFragment$4.onResponse(QuotesListFragment.java:202)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6290)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
任何人都遇到过类似的问题,如果找到任何解决方案,请告诉我。多谢
getContext()
返回null
。当片段不再附加到活动时,它将执行此操作。
您似乎正在从片段进行 Retrofit 调用,并尝试更新SharedPreferences
作为处理响应的一部分。但是,显然,您没有检查片段是否仍附加到活动。片段被分离的原因有很多,包括导航(例如,用户在网络 I/O 完成之前按 BACK 退出活动(或配置更改(例如,用户旋转屏幕,导致 Android 切换到新活动和新片段,但 Retrofit 仍想与旧片段对话(。