2017-07-29 20 views
0

私はこのようなコードを使用して私のフラグメントの1つで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はまだ古い断片と話したい)。

関連する問題

 関連する問題