2017-08-02 2 views
0

Das ist mein Sparprogramm-Code wird dies die Partitur, das Datum und den Spielernamen auf der Rangliste speichern:Speichern und Abrufen von Arraylist zu SharedPreferences

mLeaderboardlist = new ArrayList<>(); 
    Leaderboardmodel s = new Leaderboardmodel(); 
    s.setDate("07/24/17"); 
    s.setName(player.getText().toString()); 
        s.setScore(Integer.parseInt(String.valueOf(yourScore.getText()))); 
      Tab1Normal.mLeaderboardlist.add(s); 
      SharedPreferences appSharedPrefs = PreferenceManager 
          .getDefaultSharedPreferences(getApplicationContext()); 
        SharedPreferences.Editor prefsEditor = appSharedPrefs.edit(); 
        Gson gson = new Gson(); 
        String json = gson.toJson(s); 
        prefsEditor.putString("MyObject", json); 
        prefsEditor.apply(); 
        prefsEditor.commit(); 

Und das ist mein retrieving Programmcode auch den Umgang in sharedpreference:

SharedPreferences appSharedPrefs = PreferenceManager 
       .getDefaultSharedPreferences(this.getActivity().getApplicationContext()); 
     Gson gson = new Gson(); 
     String json = appSharedPrefs.getString("MyObject", ""); 
     Type type = new TypeToken<ArrayList<Leaderboardmodel>>(){}.getType(); 
     ArrayList<Leaderboardmodel> leaderboard= gson.fromJson(json, type); 
      Collections.sort(leaderboard); 
      adapter = new ListLeaderBoardAdapter(getActivity(), leaderboard); 
      lvLeaderboardlist.setAdapter(adapter); 

der sparen Teil der Arbeit Bußgelder Spar aber das Abrufen Teil einen Fehler an und macht den Absturz der Anwendung, die Fehleranzeige:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Erwartete BEGIN_ARRAY aber war in Zeile 1 Spalte 2 Pfad

$
+0

Haben Sie versucht, einen Haltepunkt auf 'String json = appSharedPrefs.getString (" MyObject "," ");', um zu sehen, was es da ist ..? – AsfK

+0

was soll ich tun, mein Herr? – Luffy

+0

überprüfen Sie JSON Kontakt mit Android-Debugger (verwenden Sie die Debug ..) Siehe diesen Link: https://developer.android.com/studio/debug/index.html – AsfK

Antwort

0

Das Problem ist, dass Sie ein Objekt setzen, kein json.

Leaderboardmodel s = new Leaderboardmodel(); 
.... 
String json = gson.toJson(s); 
prefsEditor.putString("MyObject", json); 

Sie benötigen Array

mLeaderboardlist = new ArrayList<>(); 
... 
String json = gson.toJson(mLeaderboardlist); 
+0

wenn ich diesen Sir, es gibt keine Objektanzeige in abrufen Teil – Luffy

+0

Sie setzen Array, Sie erhalten Array. Du legst ein Objekt, du bekommst ein Objekt. Fügen Sie Objekte zu Ihrer Liste hinzu. Sie legen ein Objekt in 'Tab1Normal.mLeaderboardlist.add (s);', nicht 'mleaderboardlist.add (s);'. Ich weiß nicht, was du tust. –

+0

Wie bekomme ich diesen Sir zurück? – Luffy

0

diese Zeile ändern

ArrayList<Leaderboardmodel> leaderboard= gson.fromJson(json, type); 

zu BEGIN_OBJECT dieser

Leaderboardmodel[] leaderboard= gson.fromJson(json, Leaderboardmodel[].class); 

und sehen, ob es funktioniert. Ich hoffe es.

Update:

Sie benötigen eine Array-Liste von Leaderboardmodel zu erstellen, dann sortieren nennen.

ArrayList<Leaderboardmodel > leaderboardmodels = new ArrayList<>(); 
leaderboardmodels.addAll(leaderboard); 
Collections.sort(leaderboardmodels); 
+0

es funktioniert nicht sir, seine produzieren einen Fehler – Luffy

+0

Ich redigierte meine Antwort Hast du das versucht? –

+0

ja Sir, es ist ein Fehler – Luffy

0

Versuchen Sie, in Ihre geladenen json und sehen zu debuggen, wenn Sie wirklich gültig JSON-String erhalten.

Es gibt auch bereits eine ähnliche Frage auf so: Parsing generic ArrayList using GSON

0

setzen, wenn Sie Sie speichern, speichern Objekt nicht Arraylist,

String json = gson.toJson(s); 

hier s Aufgabe Leaderboardmodel und nicht die Arraylist von Leaderboardmodel

Also, wenn Sie abrufen, holen Sie es als Objekt nicht Array-Liste wie,

+0

danke sir .. – Luffy

+0

Das ist ein Objekt, keine Liste. –

Verwandte Themen