2012-09-05 23 views
9

quería ahorrar un ArrayList a SharedPreferences así que necesito para convertirlo en una cadena y la espalda, esto es lo que estoy haciendo:Java convertir ArrayList en cadena y volver a ArrayList?

// Save to shared preferences 
SharedPreferences sharedPref = this.getPreferences(Activity.MODE_PRIVATE); 
SharedPreferences.Editor editor = this.getPreferences(Activity.MODE_PRIVATE).edit(); 
editor.putString("myAppsArr", myAppsArr.toString()); 
editor.commit(); 

puedo recuperarlo con String arrayString = sharedPref.getString("yourKey", null); pero no sé cómo vuelve a convertir arrayString en ArrayList. ¿Cómo puede hacerse esto?


Mi matriz se ve algo como:

[item1,item2,item3] 

Respuesta

26

Tienes 2 opciones:

  1. PARSE manualmente la cadena y recrear el ArrayList. Esto sería bastante tedioso.
  2. Utilice una biblioteca JSON como la biblioteca Gson de Google para almacenar y recuperar objetos como cadenas JSON. Esta es una biblioteca ligera, bien considerada y popular. Sería una solución ideal en su caso con un mínimo de trabajo requerido. por ejemplo,

    // How to store JSON string 
    Gson gson = new Gson(); 
    // This can be any object. Does not have to be an arraylist. 
    String json = gson.toJson(myAppsArr); 
    
    // How to retrieve your Java object back from the string 
    Gson gson = new Gson(); 
    DataObject obj = gson.fromJson(arrayString, ArrayList.class); 
    
+0

Cambié los elementos de la matriz a cadenas, estoy seguro de que debe ser mucho más fácil ahora. – lisovaccaro

+0

No importa. Con Gson, puedes convertir cualquier objeto java en una cadena y luego convertirlo. Entonces, incluso si tiene una lista de arrays de objetos personalizados, no hay problema. –

2

probar este

ArrayList<String> array = Arrays.asList(arrayString.split(",")) 

Esto funcionará si se utiliza la coma como separador y ninguno de los artículos tenerlo.

1

Terminé usando:

ArrayList<String> appList = new ArrayList<String>(Arrays.asList(appsString.split("\\s*,\\s*"))); 

Esto no funciona para todos los tipos de matriz sin embargo. Esta opción difiere de:

ArrayList<String> array = Arrays.asList(arrayString.split(",")); 

en la que la segunda opción crea una matriz inmutable.

+0

¿Has visto mi respuesta? –