views:

192

answers:

4

my app crashes with a null pointer exception on the code below. i have an xml preference file under res/xml/defaults.xml Any idea why it's crashing?

public class Preference extends Activity {
    public Preference()
    {
    }

    public String getPreference(String key)
    {
                //it still crashes here
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
        String result = settings.getString(key,  null);
        return result;
    }
}
+1  A: 

Preference files are not storead in project's /res/xml/defaults.xml

They are stored on the device in your application folder something like

/data/data/com.your.pkg/default.prefs

Try do not specify the file name, as you will have some problems with the preference files, like this OP had here

SharedPreferences preferences = PreferenceManager
                    .getDefaultSharedPreferences(context);

Then you will probably have to query

preferences.getString('weightPref', null);
Pentium10
Thanks, I did as u suggested and i still get a nullPointerException.I posted my complete code above do you see a problem?thanks
aryaxt
A: 

Here's a sample code which shows how to save and retrieve Preferences. Here I am saving username and password in SharedPreferences.

SharedPreferences uPreferences = getSharedPreferences("CurrentUser", MODE_PRIVATE);
SharedPreferences.Editor editor; = uPreferences.edit(); //Instantiating editor object


protected void storeSharedPrefs(String username, String password) {
        /*
         * Storing in Shared Preferences
         */
        editor.putString("username", username);
        editor.putString("password", password);     
        editor.commit();  //Commiting changes
    }

Retrieving username and password in another activity from SharedPreferences.

 private SharedPreferences mSP;
    mSP = getSharedPreferences("CurrentUser", MODE_PRIVATE);
            String username = mSP.getString("username", null);
            String password = mSP.getString("password", null);

Hope it helps..

primalpop
A: 

Setting a value in the shared preferences:

Editor prefs = getSharedPreferences("Application_name", MODE_PRIVATE).edit();
prefs.putString("key", accountKey);
prefs.commit();

Getting the value from another activity:

String accountKey = 
    this.getSharedPreferences("Application_name", MODE_PRIVATE).
    getString("key", null);

It would be nice if you access the variable by using some predefined handler, such as getString(R.string._key), instead of the hardcoded string "key".

ro-tex
A: 

Your Preferences should extend PreferenceActivity. Then you need to create a resource xml file for preferences, and reference that in your PreferenceActivity like so:

@Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
            etc.
    }

The preferences xml should have a PreferenceScreen as the top level element, and you can take advantage of all the different preference views Android makes available to you for setting preferences. This would be the most common, and elegant way to do it.

Scienceprodigy