store and retrieve a class object in shared preference store and retrieve a class object in shared preference android android

store and retrieve a class object in shared preference


Yes we can do this using Gson

Download Working code from GitHub

SharedPreferences mPrefs = getPreferences(MODE_PRIVATE);

For save

Editor prefsEditor = mPrefs.edit();Gson gson = new Gson();String json = gson.toJson(myObject); // myObject - instance of MyObjectprefsEditor.putString("MyObject", json);prefsEditor.commit();

For get

Gson gson = new Gson();String json = mPrefs.getString("MyObject", "");MyObject obj = gson.fromJson(json, MyObject.class);

Update1

The latest version of GSON can be downloaded from github.com/google/gson.

Update2

If you are using Gradle/Android Studio just put following in build.gradle dependencies section -

implementation 'com.google.code.gson:gson:2.6.2'


we can use Outputstream to output our Object to internal memory. And convert to string then save in preference. For example:

    mPrefs = getPreferences(MODE_PRIVATE);    SharedPreferences.Editor ed = mPrefs.edit();    ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();    ObjectOutputStream objectOutput;    try {        objectOutput = new ObjectOutputStream(arrayOutputStream);        objectOutput.writeObject(object);        byte[] data = arrayOutputStream.toByteArray();        objectOutput.close();        arrayOutputStream.close();        ByteArrayOutputStream out = new ByteArrayOutputStream();        Base64OutputStream b64 = new Base64OutputStream(out, Base64.DEFAULT);        b64.write(data);        b64.close();        out.close();        ed.putString(key, new String(out.toByteArray()));        ed.commit();    } catch (IOException e) {        e.printStackTrace();    }

when we need to extract Object from Preference. Use the code as below

    byte[] bytes = mPrefs.getString(indexName, "{}").getBytes();    if (bytes.length == 0) {        return null;    }    ByteArrayInputStream byteArray = new ByteArrayInputStream(bytes);    Base64InputStream base64InputStream = new Base64InputStream(byteArray, Base64.DEFAULT);    ObjectInputStream in;    in = new ObjectInputStream(base64InputStream);    MyObject myObject = (MyObject) in.readObject();


Not possible.

You can only store, simple values in SharedPrefences SharePreferences.Editor

What particularly about the class do you need to save?