1

In meiner Aktivität hat der Benutzer eine Reihe von Bildern, die er auswählt, und dann möchte ich sie in den Einstellungen speichern. Dann verlässt der Benutzer die Aktivität und kommt zurück, ich möchte, dass diese Bilder noch in eine ImageView geladen werden. Ich versuche Gson zu benutzen, aber ich habe Probleme und kann nicht sehen, was ich falsch mache. Ich hoffe, dass externe Einsicht mir bei dieser offensichtlichen Antwort helfen kann.Wie zu speichern und ein Objekt von Gson in Android abrufen?

Vielen Dank.

Hier ist mein Code so weit.

private void savePreferencesForImages(String key, ArrayList<Image> imageList) 
    { 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     Gson gson = new Gson(); 
     String json = gson.toJson(imageList); 
     editor.putString(key,json); 
     editor.commit(); 
    } 


//Storing Local data. 
private void loadPreferences() 
{ 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 

    Gson gson = new Gson(); 
    String gsonString = sharedPreferences.getString("userImages", ""); 
    ArrayList<Image> images = gson.fromJson(gsonString, Image.class);//Ask StackOverflow tomorrow. 
} 
+0

'Image.class' kann nicht in' ArrayList geladen werden 'ist das dein Problem? –

+0

@ cricket_007 gut hat mir drei Vorschläge gegeben. Ich habe eine Fehlermeldung, die auf dieser Zeile erscheint. Aber, ich bin nicht sicher, welche Zeile wird sicherstellen, dass ich eine ArrayList namens Bilder, die mit den Bildern des Benutzers gefüllt ist. entweder: 1) Variable 'Bilder' Typ in die Bildbibliothek ändern. 2) migrieren 'Bilder' Typ zu Bild-Bibliothek 3) Make 'fromJson' zurück java.util.ArrayList – TheQ

+0

@ cricket_007 Ich glaube nicht, es ist eine doppelte Antwort. Das bedeutet, dass ein Json-Objekt in ArrayList konvertiert wird. – TheQ

Antwort

1

In dem Teil der Daten des Abrufens Sie eine Art benötigen, die den String in eine Liste der Bilder deserialisieren ...

wie:

private void loadPreferences() 
{ 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 

    Gson gson = new Gson(); 
    Type type = new TypeToken<List<Image>>() {}.getType(); 
    String gsonString = sharedPreferences.getString("userImages", ""); 
    List<Image> images = gson.fromJson(gsonString, type); 
} 
+0

Was wäre "Leser" in: Liste images = gson.fromJson (Leser, Typ); – TheQ

+0

okay für sicher, ich werde das ausprobieren. – TheQ

+0

Danke Mann, es hat funktioniert! – TheQ

1

Eine Sache, die Sie tun können, ist Speichern Sie die Bilder einzeln und laden Sie sie anschließend beim Abrufen in eine ArrayList.

private void savePreferencesForImages(ArrayList<Image> imageList) 
{ 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    Gson gson = new Gson(); 
    int imgKey = 0; 
    for (Image img: imageList) { 
     String json = gson.toJson(imageList); 
     editor.putString("" + imgKey,json); 
     editor.commit(); 
     imgKey++; 
    } 
} 


private ArrayList<Image> loadPreferences() 
{ 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
    Gson gson = new Gson(); 
    Map<String, ?> allPrefs = sharedPreferences.getAll(); 
    String gsonString = sharedPreferences.getString("userImages", ""); 
    ArrayList<Image> images = new ArrayList<Image>(); 
    if (!allPrefs.isEmpty()) { 
     for (Map.Entry<String, ?> entry : allPrefs.entrySet()) { 
      String json = entry.getValue().toString(); 
      Image temp = gson.fromJson(json, Image.class); 
      images.add(temp); 
     } 
    } 
    return images; 
} 

Dies ist möglicherweise der zu komplizierte Weg, um darüber zu gehen, aber es ist das erste, was ich denken konnte. Sie könnten auch Ihre eigene ImageManager-Klasse oder so etwas erstellen und das Verhalten einer ArrayList mit einer getImage (key) -Methode usw. emulieren. Dies würde die Komplikationen beseitigen, die beim Speichern einer ArrayList verursacht werden.

+0

Ja, ich lief auch so (und danke für die Lösung). Also habe ich die Gson-Bibliothek benutzt, die es ermöglicht, komplexe Datentypen in geteilte Präferenzen mit ein paar Codezeilen einzufügen. Ich empfehle es sehr, wenn Sie es jemals brauchen. – TheQ