wdyz
wdyz

Reputation: 193

getSharedPreferences return nullpointerexception on fragment method

I have a getSharedPreferences on my fragment1, and it will load int from previous fragment.

public void backButtonWasPressed() {
    settings = getActivity().getSharedPreferences("MyPref", 0);
    .....
}

i call fragment1.backButtonWasPressed() and give me force close and error message nullpointerexception on "settings = getActivity().getSharedPreferences("MyPref", 0);"

My Logcat :

08-28 16:52:21.828: E/AndroidRuntime(4412): FATAL EXCEPTION: main
08-28 16:52:21.828: E/AndroidRuntime(4412): java.lang.NullPointerException
08-28 16:52:21.828: E/AndroidRuntime(4412):     at pkh.apps.Fragment1.backButtonWasPressed(Fragment1.java:324)
08-28 16:52:21.828: E/AndroidRuntime(4412):     at pkh.apps.KajianUtama.onBackPressed(KajianUtama.java:71)
08-28 16:52:21.828: E/AndroidRuntime(4412):     at android.app.Activity.onKeyUp(Activity.java:2131)

Line 324 on Fragment1 is : settings = getActivity().getSharedPreferences("MyPref", 0);

My Main SherlockFragmentActivity :

public class KajianUtama extends SherlockFragmentActivity implements OnItemClickListener {
....
@Override
public void onBackPressed() {
    super.onBackPressed();
    FragmentManager fm = getSupportFragmentManager();
    fragment1 = (Fragment1) fm.findFragmentById(R.id.content_frame);
    fragment1.backButtonWasPressed();
}
.....

}

My Fragment1 :

public class Fragment1 extends SherlockFragment{
....
   public void backButtonWasPressed() {
     settings = getActivity().getSharedPreferences("MyPref", 0);
     c = settings.getInt("numRun",0);
     Log.d("back pressed", "c " + c);
   }
...
}

Please give me a solution to solve this problem. Thank you.

Upvotes: 1

Views: 993

Answers (1)

Stefano
Stefano

Reputation: 3215

Check if the name of your Preference is the same that you use to save it, a best practice is to save a constant PREFERENCE_NAME="myPreferenceName" and then use that constant instead of the string.

EDIT

Try in this way

@Override
public void onBackPressed() {
  super.onBackPressed();
  FragmentManager fm = getSupportFragmentManager();
  fragment1 = (Fragment1) fm.findFragmentById(R.id.content_frame);
  fragment1.backButtonWasPressed(this);
}

and then

public void backButtonWasPressed(Context context) {
   settings = context.getSharedPreferences("MyPref", 0);
   c = settings.getInt("numRun",0);
   Log.d("back pressed", "c " + c);
}

Pass the context to the method

Upvotes: 2

Related Questions