Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Shared Preferences on a Null Object Reference Android

Tags:

java

android

I am new to android developing maybe its a silly question but please help me. I am getting this error while trying to save an int value.

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference

And here is my code

SharedPreferences prefs = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);
String value = "com.example.app.value";
int i = prefs.getInt(value, 0);

And for write

prefs.edit().putInt(number, i).apply();

I just want to set a SharedPreferences and want to read it at the first and write it inside the Activity. How can I solve it?

EDIT

public class MainActivity extends Activity {
SharedPreferences sharedpreferences;
public static final String MyPREFERENCES = "myprefs";
public static final  String value = "key";

int i = sharedpreferences.getInt(value, 0);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
}
public void sendMessage(View view) {
    i += 1;    
    SharedPreferences.Editor editor = sharedpreferences.edit();
    editor.putInt(value, i);
    editor.apply();
}

I managed to save preferences with a different way but I couldn't manage to read it in MainActivity extends Activity class.

log :

Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'int android.content.SharedPreferences.getInt(java.lang.String, int)' on a null object reference

like image 256
Simbilli Dev Avatar asked Jun 30 '15 15:06

Simbilli Dev


People also ask

Where shared preferences are stored in Android device?

Android stores Shared Preferences settings as XML file in shared_prefs folder under DATA/data/{application package} directory. The DATA folder can be obtained by calling Environment. getDataDirectory() .

How can I get shared preferences in Android?

In order to use shared preferences, you have to call a method getSharedPreferences() that returns a SharedPreference instance pointing to the file that contains the values of preferences.

Can we store object in SharedPreferences Android?

We can store fields of any Object to shared preference by serializing the object to String. Here I have used GSON for storing any object to shared preference.

What does Android shared preferences do?

A SharedPreferences object points to a file containing key-value pairs and provides simple methods to read and write them. Each SharedPreferences file is managed by the framework and can be private or shared. This page shows you how to use the SharedPreferences APIs to store and retrieve simple values.


3 Answers

This is an example of SharedPreferences

To save name in SharedPreferences:

SharedPreferences sharedPreferences = PreferenceManager
                .getDefaultSharedPreferences(this);
        Editor editor = sharedPreferences.edit();
        editor.putString(key, name);
        editor.apply();

To get name from SharedPreferences:

 SharedPreferences sharedPreferences = PreferenceManager
                .getDefaultSharedPreferences(this);
        String name = sharedPreferences.getString(key, "default value");

For more details visit: http://developer.android.com/training/basics/data-storage/shared-preferences.html

Updated Code:

public class MainActivity extends Activity {
SharedPreferences sharedpreferences;
public static final String MyPREFERENCES = "myprefs";
public static final  String value = "key";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
    int i = sharedpreferences.getInt(value, 0);
    //use the value of i where needed.
}
public void saveMessage(View view) {
    i += 1;    
    SharedPreferences.Editor editor = sharedpreferences.edit();
    editor.putInt(value, i);
    editor.apply();
}
like image 175
Anand Singh Avatar answered Nov 12 '22 05:11

Anand Singh


You can implement it like this

public class PreferenceClass {
    public static final String PREFERENCE_NAME = "PREFERENCE_DATA";
    private final SharedPreferences sharedpreferences;

    public PreferenceClass(Context context) {
         sharedpreferences = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
    }

    public int getCount() {
         int count = sharedpreferences.getInt("count", -1);
         return count;
    }

    public void setCount(int count) {
         SharedPreferences.Editor editor = sharedpreferences.edit();
         editor.putInt("count", count);
         editor.commit();
    }

    public void clearCount() {
         SharedPreferences.Editor editor = sharedpreferences.edit();
         editor.remove("count");
         editor.commit();
    }
}

getCount() will return -1 if no value is set.

like image 38
Ashwin S Ashok Avatar answered Nov 12 '22 06:11

Ashwin S Ashok


This question was for the "Simplify Networking with RetroFit" android course. I was getting this error because i didnt have my BaseApplication class in the Android Manifest...Everything is good now

like image 2
Mehdi Abiyat Avatar answered Nov 12 '22 05:11

Mehdi Abiyat