2012-09-12 8 views
125

Utilizando la biblioteca Gson, ¿cómo convierto una cadena JSON a una JsonLog clase personalizada? Básicamente, JsonLog es una interfaz implementada por diferentes tipos de registros hechos por mi aplicación de Android (registros de SMS, registros de llamadas, registros de datos) y este ArrayList es una colección de todos ellos. Me aparece un error en la línea 6.Gson - convertir de Json a una ArrayList mecanografiada <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 
    } 
} 

Parece que el compilador no entiende Me refiero a un escrito ArrayList. ¿Qué debo hacer?

Respuesta

318

Puede usar TypeToken para cargar la cadena json en un objeto personalizado.

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

Bien, lo intentaré primero. –

+2

intenté este enfoque y recibí un error de compilación que decía que TypeToken() solo tenía acceso protegido – jonney

+0

@jonney. Tengo el mismo problema. Alguna solución? – Zapnologica

15

Su muestra JSON es:

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

por lo que si desea guardar ArrayList de módulos en sus SharedPrefrences manera:

1- convertirá su ArrayList devuelto para formato JSON usando este método

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

2- Guardar en prefreneces compartidos

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

3- a recuperarlo en cualquier momento obtener jsonString de las preferencias compartidas como la

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

4- convertir de nuevo a la lista de matriz

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

esta solución también factible si quieres para analizar ArrayList of Objects Espero que sea útil al usar Gson Library.

Cuestiones relacionadas