Search code examples
javaandroidsharedpreferences

How to save List<Object> to SharedPreferences?


I have a list of products, which i retrieve from webservice, when app is opened for first time, app gets product list from webservice. I want to save this list to shared preferences.

    List<Product> medicineList = new ArrayList<Product>();

where Product class is:

public class Product {
    public final String productName;
    public final String price;
    public final String content;
    public final String imageUrl;

    public Product(String productName, String price, String content, String imageUrl) {
        this.productName = productName;
        this.price = price;
        this.content = content;
        this.imageUrl = imageUrl;
    }
}

how i can save this List not requesting from webservice each time?


Solution

  • It only possible to use primitive types because preference keep in memory. But what you can use is serialize your types with Gson into json and put string into preferences:

    private static SharedPreferences sharedPreferences = context.getSharedPreferences(STORE_FILE_NAME, Context.MODE_PRIVATE);
    
    private static SharedPreferences.Editor editor = sharedPreferences.edit();
        
    public <T> void setList(String key, List<T> list) {
        Gson gson = new Gson();
        String json = gson.toJson(list);
        
        set(key, json);
    }
    
    public static void set(String key, String value) {
        editor.putString(key, value);
        editor.commit();
    }
    

    Extra Shot from below comment by @StevenTB

    To Retrive

     public List<YourModel> getList(){
        List<YourModel> arrayItems;
        String serializedObject = sharedPreferences.getString(KEY_PREFS, null); 
        if (serializedObject != null) {
             Gson gson = new Gson();
             Type type = new TypeToken<List<YourModel>>(){}.getType();
             arrayItems = gson.fromJson(serializedObject, type);
         }
    }