2012-09-12 17 views
125

Gson kitaplığını kullanarak, bir JSON dizesini JsonLog özel sınıfının ArrayList sürümüne nasıl dönüştürebilirim? Temel olarak, JsonLog benim Android uygulaması tarafından yapılan farklı türde günlükler tarafından uygulanan bir arabirimdir - SMS günlükleri, arama günlükleri, veri günlükleri - ve bu ArrayList hepsi bir koleksiyonudur. Ben derleyici bir daktilo ArrayList bahsediyorum anlamıyor görünüyor hat 6.Gson - Json ile yazılmış bir ArrayList dönüştürebilirsiniz <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 
    } 
} 

bir hata alıyorum. Ben ne yaparım?

cevap

318

json dizesini özel bir nesneye yüklemek için TypeToken'u kullanabilirsiniz.

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

Tamam, önce bunu deneyeceğim. –

+2

bu yaklaşımı denedim ve TypeToken() korumasına yalnızca – jonney

+0

@ jonney ile aynı sorunu çözdüğümü söyleyen bir derleme hatası aldım. Herhangi bir çözüm? – Zapnologica

15

JSON örnektir: böylece

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

bunu sizin SharedPrefrences modüllerin arraylist kaydetmek istiyorsanız:

1- Bu yöntemi kullanarak json biçim için iade arraylist dönüştürür paylaşılan prefreneces

kendisine kaydet

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

2-

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

3-İsterseniz de yapılabilir

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

bu çözümü bu

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

4- gibi Paylaşılan tercihlerinden JsonString olsun herhangi bir zamanda geri almak dizi listesine tekrar dönüştürmek Nesneleri ArrayList ayrıştırmak için Umut, Gson Library kullanarak yardımcı olur.