2012-09-12 29 views
125

使用Gson庫,如何將JSON字符串轉換爲定製類JsonLogArrayList?基本上,JsonLog是由不同類型的我的Android應用程序原木製成的實現的接口 - 短信記錄,通話記錄,數據記錄 - 這是ArrayList所有這些的集合。我保持一致6.Gson - 從Json轉換爲打印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 
    } 
} 

得到一個錯誤似乎編譯器不明白我指的是一個類型ArrayList。我該怎麼辦?

回答

318

您可以使用TypeToken將JSON字符串加載到自定義對象。

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

好的,我會先嚐試。 –

+2

嘗試這種做法,我得到一個編譯錯誤說TypeToken()已受保護的訪問只有 – jonney

+0

@jonney我有同樣的問題。任何解決方案 – Zapnologica

15

你的JSON樣本:

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

,所以如果你想保存模塊的ArrayList在SharedPrefrences這樣:

1將使用這種方法轉換您返回數組列表的JSON格式

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

2-保存它在共享prefreneces

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

3〜隨時檢索它從共享偏好得到JsonString像

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

4-再次將其轉換爲數組列表

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()); 

這種解決方案也可行的,如果你想解析對象ArrayList 希望它可以幫助你通過使用Gson Library

相關問題