2017-07-29 111 views
0

我在我的片段之一使用PreferenceManager使用这样的代码。试图调用虚拟方法'java.lang.String android.content.Context.getPackageName()

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) 

任何人都面临着类似的问题,如果找到任何解决办法,让我知道。非常感谢

回答

0

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

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

相关问题