尝试调用虚方法' java.lang.String android.content.Context.getPackageName()

时间:2017-07-29 18:05:32

标签: java android

我在我的一个片段中使用PreferenceManager,使用这样的代码。

String userId = PreferenceManager.getDefaultSharedPreferences(getContext()).getString("userId", "");

它导致上面提到的一些时间错误。我在stackflow中搜索了很多问题,但无法修复它。我的完整错误日志如下所示

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)

任何人都遇到类似的问题,如果找到任何解决方案,请告诉我。非常感谢

1 个答案:

答案 0 :(得分:0)

getContext()正在返回null。当片段不再附加到活动时,它会这样做。

您似乎正在从片段进行Retrofit调用,并且正在尝试更新SharedPreferences作为处理响应的一部分。但是,显然,您没有检查片段是否仍附加到活动。片段可能已被分离的原因有很多,包括导航(例如,用户在网络I / O完成之前按BACK以退出活动)或配置更改(例如,用户旋转屏幕,导致Android切换到一个新的活动和新的片段,但Retrofit仍然希望与旧的片段交谈。)