usar preferencias preferencia from editar data como code archivos and java android sharedpreferences

java - preferencias - ¿Cómo guardar la Lista<Objeto> en SharedPreferences?



sharedpreferences android code (8)

Tengo una lista de productos, que recupero del servicio web, cuando la aplicación se abre por primera vez, la aplicación obtiene la lista de productos del servicio web. Quiero guardar esta lista a las preferencias compartidas.

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

donde la clase de producto es:

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; } }

¿Cómo puedo guardar esta lista que no solicito del servicio web cada vez?


Actualmente tienes dos opciones.
a) Utilice las preferencias compartidas
b) Usar SQLite y guardar valores en eso.

Cómo realizar
a) SharedPreferences
Primero almacene su Lista como un conjunto, y luego vuelva a convertirla en una Lista cuando lea en SharedPreferences.

Listtasks = new ArrayList<String>(); Set<String> tasksSet = new HashSet<String>(Listtasks); PreferenceManager.getDefaultSharedPreferences(context) .edit() .putStringSet("tasks_set", tasksSet) .commit();

Entonces cuando lo lees:

Set<String> tasksSet = PreferenceManager.getDefaultSharedPreferences(context) .getStringSet("tasks_set", new HashSet<String>()); List<String> tasksList = new ArrayList<String>(tasksSet);

b) SQLite Un buen tutorial: http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/


Como se dijo en la respuesta aceptada, podemos guardar una lista de objetos como:

public <T> void setList(String key, List<T> list) { Gson gson = new Gson(); String json = gson.toJson(list); set(key, json); } public void set(String key, String value) { if (setSharedPreferences != null) { SharedPreferences.Editor prefsEditor = setSharedPreferences.edit(); prefsEditor.putString(key, value); prefsEditor.commit(); } }

Consíguelo usando:

public List<Company> getCompaniesList(String key) { if (setSharedPreferences != null) { Gson gson = new Gson(); List<Company> companyList; String string = setSharedPreferences.getString(key, null); Type type = new TypeToken<List<Company>>() { }.getType(); companyList = gson.fromJson(string, type); return companyList; } return null; }


En SharedPreferences solo puedes almacenar primitivos.

Como un enfoque posible es que puede usar GSON y almacenar valores en las preferencias en JSON.

Gson gson = new Gson(); String json = gson.toJson(medicineList); yourPrefereces.putString("listOfProducts", json); yourPrefereces.commit();


Puede usar GSON para convertir Objeto -> JSON (.toJSON) y JSON -> Objeto (.fromJSON).

  • Defina sus etiquetas con lo que quiera (por ejemplo):

    private static final String PREFS_TAG = "SharedPrefs"; private static final String PRODUCT_TAG = "MyProduct";

  • Obtenga su sharedPreference para estas etiquetas

    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; }

  • Establezca sus preferencias compartidas

    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(); }

  • Si desea guardar una matriz de productos. Tu hiciste esto:

    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(); }


Puedes hacerlo usando Gson como se muestra a continuación:

  • Descargar List<Product> desde el servicio web
  • Convierta la List en String Json usando el new Gson().toJson(medicineList, new TypeToken<List<Product>>(){}.getType())
  • Guarde la cadena convertida en SharePreferences como lo hace normalmente

Para reconstruir su List , necesita revertir el proceso usando el método fromJson disponible en Gson .


Solo es posible usar tipos primitivos porque las preferencias se guardan en la memoria. Pero lo que puede usar es serializar sus tipos con Gson en json y poner la cadena en las preferencias:

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(); }


Todas las respuestas relacionadas con JSON están bien, pero recuerde que Java le permite serializar cualquier objeto si implementa la interfaz java.io.Serializable. De esta manera también puede guardarlo en las preferencias como un objeto serializado. Aquí hay un ejemplo para almacenar como Preferencias: https://gist.github.com/walterpalladino/4f5509cbc8fc3ecf1497f05e37675111 Espero que esto pueda ayudarle como opción.


SharedPreferences mPrefs = getPreferences(MODE_PRIVATE);

Para guardar

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

Olvidar

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