簡體   English   中英

嘗試調用虛擬方法'java.lang.String android.content.Context.getPackageName()

[英]Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()

我正在使用這樣的代碼在我的片段之一中使用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)

任何人都面臨過類似的問題,如果找到任何解決方案,請告訴我。 非常感謝

getContext()返回null 當片段不再連接到活動時,它將執行此操作。

您似乎正在從一個片段進行Retrofit調用,並嘗試在處理響應的過程中更新SharedPreferences 但是,顯然,您並沒有檢查該片段是否仍附加到該活動。 片段可能已被分離的原因有很多,包括導航(例如,用戶在網絡I / O完成之前按BACK退出活動)或配置更改(例如,用戶旋轉屏幕,導致Android切換到新的活動和新的片段,但Retrofit仍然希望與舊片段進行對話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM