Solución:
Puede usar TypeToken para cargar la cadena json en un objeto personalizado.
logs = gson.fromJson(br, new TypeToken<List<JsonLog>>(){}.getType());
Documentación:
Representa un tipo genérico T.
Java aún no proporciona una forma de representar tipos genéricos, por lo que esta clase lo hace. Obliga a los clientes a crear una subclase de esta clase que permite recuperar la información de tipo incluso en tiempo de ejecución.
Por ejemplo, para crear un tipo literal para
List<String>
, puede crear una clase interna anónima vacía:
TypeToken<List<String>> list = new TypeToken<List<String>>() {};
Esta sintaxis no se puede utilizar para crear literales de tipo que tengan parámetros comodín, como
Class<?>
oList<? extends CharSequence>
.
Kotlin:
Si necesitas hacerlo en Kotlin puedes hacerlo así:
val myType = object : TypeToken<List<JsonLong>>() {}.type
val logs = gson.fromJson<List<JsonLong>>(br, myType)
O puede ver esta respuesta para varias alternativas.
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"
]
}
Entonces, si desea guardar la lista de matrices de módulos en sus SharedPrefrences, entonces:
1- convertirá su lista de matrices devuelta para formato json usando este método
public static String toJson(Object jsonObject) {
return new Gson().toJson(jsonObject);
}
2- Guárdalo en preferencias compartidas
PreferencesUtils.getInstance(context).setString("players", toJson((.....ArrayList you want to convert.....)));
3- para recuperarlo en cualquier momento, obtenga JsonString de las preferencias compartidas de esa manera
String playersString= PreferencesUtils.getInstance(this).getString("players");
4- conviértalo de nuevo a la lista de matrices
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 es factible si desea analizar ArrayList of Objects. Espero que le ayude al usar Gson Library.
Si desea utilizar matrices, es bastante simple.
logs = gson.fromJson(br, JsonLog[].class); // line 6
Proporcionar la JsonLog
como una matriz JsonLog[].class