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?
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); } }
You can use GSON to convert Object -> JSON(.toJSON) and JSON -> Object(.fromJSON).
Define your Tags with you want (for example):
private static final String PREFS_TAG = "SharedPrefs"; private static final String PRODUCT_TAG = "MyProduct";
Get your sharedPreference to these tag's
private List<Product> getDataFromSharedPreferences(){ Gson gson = new Gson(); List<Product> productFromShared = new ArrayList<>(); SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(PREFS_TAG, Context.MODE_PRIVATE); String jsonPreferences = sharedPref.getString(PRODUCT_TAG, ""); Type type = new TypeToken<List<Product>>() {}.getType(); productFromShared = gson.fromJson(jsonPreferences, type); return preferences; }
Set your sharedPreferences
private void setDataFromSharedPreferences(Product curProduct){ Gson gson = new Gson(); String jsonCurProduct = gson.toJson(curProduct); SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(PREFS_TAG, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putString(PRODUCT_TAG, jsonCurProduct); editor.commit(); }
If you want to save an array of Products, do this:
private void addInJSONArray(Product productToAdd){ Gson gson = new Gson(); SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(PREFS_TAG, Context.MODE_PRIVATE); String jsonSaved = sharedPref.getString(PRODUCT_TAG, ""); String jsonNewproductToAdd = gson.toJson(productToAdd); JSONArray jsonArrayProduct= new JSONArray(); try { if(jsonSaved.length()!=0){ jsonArrayProduct = new JSONArray(jsonSaved); } jsonArrayProduct.put(new JSONObject(jsonNewproductToAdd)); } catch (JSONException e) { e.printStackTrace(); } //SAVE NEW ARRAY SharedPreferences.Editor editor = sharedPref.edit(); editor.putString(PRODUCT_TAG, jsonArrayProduct); editor.commit(); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With