2012-09-05 1 views
9

ho voluto salvare un ArrayList per SharedPreferences quindi ho bisogno di trasformarlo in una stringa e indietro, questo è quello che sto facendo:Java converte ArrayList in stringa e torna 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(); 

posso recuperare con String arrayString = sharedPref.getString("yourKey", null); ma non so come convertire arrayString in una ArrayList. Come può essere fatto?


mio serie sembra qualcosa di simile:

[item1,item2,item3] 

risposta

26

Hai 2 scelte:

  1. analizzare manualmente la stringa e ricreare le arraylist. Questo sarebbe piuttosto noioso.
  2. Utilizzare una libreria JSON come la libreria di Google Gson per archiviare e recuperare oggetti come stringhe JSON. Questa è una libreria leggera, ben considerata e popolare. Sarebbe una soluzione ideale nel tuo caso con il minimo lavoro richiesto. per esempio,

    // 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

Ho modificato gli elementi dell'array in stringhe, sono sicuro che ora deve essere molto più semplice. – lisovaccaro

+0

Non importa. Con Gson, puoi convertire qualsiasi oggetto java in una stringa e poi riconvertirlo. Quindi, anche se si dispone di un array di oggetti personalizzati, non c'è alcun problema. –

2

Prova questa

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

Questo funziona se virgola è utilizzata come separatore e nessuno degli oggetti hanno.

1

ho finito per usare:

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

Questo non funziona per tutti i tipi di array però. Questa opzione è diversa da:

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

su cui la seconda opzione crea un array immutabile.

+0

Hai visto la mia risposta? –