2012-09-12 5 views
125

Korzystając z biblioteki Gson, w jaki sposób przekonwertować ciąg JSON na ArrayList niestandardowej klasy JsonLog? Zasadniczo, JsonLog to interfejs zaimplementowany przez różne rodzaje dzienników wykonanych przez moją aplikację na Androida - dzienniki SMS, dzienniki połączeń, dzienniki danych - i ta ArrayList jest zbiorem wszystkich z nich. Wciąż otrzymuję błąd w linii 6.Gson - konwersja z Json do wpisanej tablicy ArrayList <T>

public static void log(File destination, JsonLog log) { 
    Collection<JsonLog> logs = null; 
    if (destination.exists()) { 
     Gson gson = new Gson(); 
     BufferedReader br = new BufferedReader(new FileReader(destination)); 
     logs = gson.fromJson(br, ArrayList<JsonLog>.class); // line 6 
     // logs.add(log); 
     // serialize "logs" again 
    } 
} 

Wydaje się, że kompilator nie rozumie, mam na myśli o typie ArrayList. Co ja robię?

Odpowiedz

318

Możesz użyć TypeToken, aby załadować ciąg jsonów do niestandardowego obiektu.

logs = gson.fromJson(br, new TypeToken<List<JsonLog>>(){}.getType()); 
+0

Dobra, spróbuję tego pierwszy. –

+2

wypróbowałem to podejście i mam błąd kompilacji mówiąc, że TypeToken() ma chroniony dostęp tylko – jonney

+0

@jonney Mam ten sam problem. Jakieś rozwiązania? – Zapnologica

15

próbka JSON jest:

{ 
    "status": "ok", 
    "comment": "", 
    "result": { 
    "id": 276, 
    "firstName": "mohamed", 
    "lastName": "hussien", 
    "players": [ 
      "player 1", 
      "player 2", 
      "player 3", 
      "player 4", 
      "player 5" 
    ] 
} 

więc jeśli chcesz zapisać ArrayList modułów w swoim SharedPrefrences tak:

1- przekształci zwracane ArrayList formacie JSON za pomocą tej metody

public static String toJson(Object jsonObject) { 
    return new Gson().toJson(jsonObject); 
} 

2- zapisać go w udostępnionych prefreneces

PreferencesUtils.getInstance(context).setString("players", toJson((.....ArrayList you want to convert.....))); 

3- aby odzyskać go w dowolnym momencie uzyskać JsonString ze wspólną preferencji jak ten

String playersString= PreferencesUtils.getInstance(this).getString("players"); 

4- przekształcić go ponownie do listy tablicy

public static Object fromJson(String jsonString, Type type) { 
    return new Gson().fromJson(jsonString, type); 
} 

ArrayList<String> playersList= (ArrayList<String>) fromJson(playersString, 
        new TypeToken<ArrayList<String>>() { 
        }.getType()); 

to rozwiązanie również wykonalne, jeśli chcesz parsować ArrayList of Objects Mam nadzieję, że to pomoże, używając Gson Library.

Powiązane problemy