Android - SharedPreferences with serializable object Android - SharedPreferences with serializable object android android

Android - SharedPreferences with serializable object


In short you cant, try serializing your object to a private file, it amounts to the same thing. sample class below:

import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import android.app.Activity;import android.content.Context;/** * * Writes/reads an object to/from a private local file *  * */public class LocalPersistence {    /**     *      * @param context     * @param object     * @param filename     */    public static void witeObjectToFile(Context context, Object object, String filename) {        ObjectOutputStream objectOut = null;        try {            FileOutputStream fileOut = context.openFileOutput(filename, Activity.MODE_PRIVATE);            objectOut = new ObjectOutputStream(fileOut);            objectOut.writeObject(object);            fileOut.getFD().sync();        } catch (IOException e) {            e.printStackTrace();        } finally {            if (objectOut != null) {                try {                    objectOut.close();                } catch (IOException e) {                    // do nowt                }            }        }    }    /**     *      * @param context     * @param filename     * @return     */    public static Object readObjectFromFile(Context context, String filename) {        ObjectInputStream objectIn = null;        Object object = null;        try {            FileInputStream fileIn = context.getApplicationContext().openFileInput(filename);            objectIn = new ObjectInputStream(fileIn);            object = objectIn.readObject();        } catch (FileNotFoundException e) {            // Do nothing        } catch (IOException e) {            e.printStackTrace();        } catch (ClassNotFoundException e) {            e.printStackTrace();        } finally {            if (objectIn != null) {                try {                    objectIn.close();                } catch (IOException e) {                    // do nowt                }            }        }        return object;    }}


The accepted answer is misleading, we can store serializable object into SharedPreferences by using GSON. Read more about it at google-gson.

you can add GSON dependency in Gradle file with:

compile 'com.google.code.gson:gson:2.7'

Here the snippet:

First, create your usual sharedPreferences:

//Creating a shared preferenceSharedPreferences  mPrefs = getPreferences(MODE_PRIVATE);

Saving from serializable object to preference:

 Editor prefsEditor = mPrefs.edit(); Gson gson = new Gson(); String json = gson.toJson(YourSerializableObject); prefsEditor.putString("SerializableObject", json); prefsEditor.commit();

Get serializable object from preference:

Gson gson = new Gson();String json = mPrefs.getString("SerializableObject", "");yourSerializableObject = gson.fromJson(json, YourSerializableObject.class);


If you object is simple POJO you can convert object to JSON string and save it in shared preferences with putString().