2012-09-12 7 views
125

Gsonライブラリを使用して、JSON文字列をArrayListカスタムクラスのJsonLogに変換するにはどうすればよいですか?基本的にJsonLogは、私のAndroidアプリで作成されたさまざまな種類のログ(SMSログ、通話履歴、データログ)によって実装されるインターフェースです。このArrayListはすべてのコレクションです。私はコンパイラは、私が入力したArrayListに言及しています理解していないようだライン6Gson - 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 
    } 
} 

でエラーを得続けます。私は何をしますか?

答えて

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" 
    ] 
} 

あなたがそうあなたのSharedPrefrences内のモジュールの配列リストを保存したい場合:

1-このメソッドを使用してJSON形式のためにあなた返さArrayListに変換します

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

2-共有プリフレンズに保存

いつでもそれを取得するための
PreferencesUtils.getInstance(context).setString("players", toJson((.....ArrayList you want to convert.....))); 

3 - あなたがしたい場合は、このソリューションはなんとかも

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

配列リストに再度変換すること

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

、4-などの共有環境設定からJsonStringを取得しますオブジェクトのArrayListをパーズする Gson Libraryを使用して助けてくれることを願っています。

関連する問題