2015-03-19 4 views
0

Мне нужно выполнить задачу, когда фрагмент открывается в первый раз, я использовал общие предпочтения для этого, но я получаю ниже исключения. Есть ли другой способ или предложение?NullPointerException при использовании SharedPreference во фрагменте

Мой код:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
     boolean first = sharedPref.getBoolean("firstTime", true); 
     private void gaCheck() 
     { 

      if (first) { 
       // doing something 
       sharedPref.edit().putBoolean("firstTime", false).apply(); 
      } 

     } 

Исключение:

03-19 10:56:48.393 2547-2547/xyz.com.xyz E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: xyz.com.xyz, PID: 2547 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{xyz.com.xyz/xyz.com.xyz.dashboard.DashBoardActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences xyz.com.xyz.dashboard.DashBoardActivity.getPreferences(int)' on a null object reference 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
      at android.app.ActivityThread.access$800(ActivityThread.java:144) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5221) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences xyz.com.xyz.dashboard.DashBoardActivity.getPreferences(int)' on a null object reference 
      at xyz.com.xyz.dashboard.DashBoardFragment.<init>(DashBoardFragment.java:427) 
      at xyz.com.xyz.dashboard.DashBoardActivity.onCreate(DashBoardActivity.java:80) 
      at android.app.Activity.performCreate(Activity.java:5933) 
+0

где у вас есть фрагмент кода? – Raghunandan

+1

убедитесь, что с помощью 'SharedPreferences sharedPref = getActivity(). GetPreferences (Context.MODE_PRIVATE);' строка внутри метода вместо этого на уровне класса –

+0

да, где у вас есть этот блок кода в вашем фрагменте? –

ответ

0

С выхода LogCat, кажется, что вы сделали операцию в конструкторе фрагмента и исключения нулевого указателя произошло.

xyz.com.xyz.dashboard.DashBoardFragment.<init>(DashBoardFragment.java:427) 

Вы должны сделать операцию в DashBoardFragment «s onAttach, onCreate, onCreateView или onActivityCreated, в этом обратном вызове, getActivity не вернется нулем.

0

Я полагаю, вы должны проверить, если вы сделали:

SharedPreferences prefs = this.getSharedPreferences(
    "DashBoardActivity", Context.MODE_PRIVATE); 

в вашем DashBoardActivity, если нет, то ваш DashBoardFragment не мог получить SharedPreferences по getReferences(...).

Смежные вопросы