java - NullPointerException at getDefaultSharedPreferences -
i'm creating preferencefragment based on developer guide nullpointerexception @ getdefaultsharedpreferences() call in oncreate() when try restore saved user preferences. inflate preferencefragment xml , set default values too. exception thrown @ getdefaultsharedpreferencesname() within getdefaultsharedpreferences().
here preferencefragment class:
public class settingsfragment extends preferencefragment implements onsharedpreferencechangelistener { public static final string key_max_walk_distance_preference = "max_walk_distance_preference"; public static final string key_max_search_time_preference = "max_search_time_preference"; context context = getactivity(); @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); // load preferences xml resource addpreferencesfromresource(r.xml.preferences); // load user preferences sharedpreferences sharedpreferences = preferencemanager .getdefaultsharedpreferences(context); if (sharedpreferences != null) { preference walkdistance = findpreference(key_max_walk_distance_preference); if (walkdistance != null) { walkdistance.setsummary(sharedpreferences.getstring( key_max_walk_distance_preference, "") + getresources().getstring( r.string.max_walk_distance_postfix)); } preference searchtime = findpreference(key_max_search_time_preference); if (searchtime != null) { searchtime.setsummary(sharedpreferences.getstring( key_max_search_time_preference, "") + getresources().getstring( r.string.max_search_time_postfix)); } } } @override public void onsharedpreferencechanged(sharedpreferences sharedpreferences, string key) { if (key.equals(key_max_walk_distance_preference)) { preference walkdistance = findpreference(key); // set summary user-description selected value walkdistance.setsummary(sharedpreferences.getstring(key, "") + getresources().getstring( r.string.max_walk_distance_postfix)); } else if (key.equals(key_max_search_time_preference)) { preference searchtime = findpreference(key); // set summary user-description selected value searchtime.setsummary(sharedpreferences.getstring(key, "") + getresources() .getstring(r.string.max_search_time_postfix)); } } @override public void onresume() { super.onresume(); getpreferencescreen().getsharedpreferences() .registeronsharedpreferencechangelistener(this); } @override public void onpause() { super.onpause(); getpreferencescreen().getsharedpreferences() .unregisteronsharedpreferencechangelistener(this); } }
here xml:
<?xml version="1.0" encoding="utf-8"?> <preferencescreen xmlns:android="http://schemas.android.com/apk/res/android" > <edittextpreference android:dialogtitle="@string/max_walk_distance_dialogtitle" android:key="max_walk_distance_preference" android:summary="@string/max_walk_distance_summary" android:title="@string/max_walk_distance_title" android:inputtype="number" android:defaultvalue="500" /> <edittextpreference android:dialogtitle="@string/max_search_time_dialogtitle" android:key="max_search_time_preference" android:summary="@string/max_search_time_summary" android:title="@string/max_search_time_title" android:inputtype="number" android:defaultvalue="10"/> </preferencescreen>
context context = getactivity(); your fragment not associated activity when object instantiated , getactivity() returns null. hence npe when trying preferences null context.
postpone getactivity() e.g. oncreate() (which called after onattach()).
Comments
Post a Comment