Android – ¿cómo agregar el objeto JSON a sharedPreferences?

Me gustaría agregar datos en el objeto JSON existente y guardar datos como cadena en preferencias compartidas con la siguiente estructura.

"results":[ { "lat":"value", "lon":"value" }, { "lat":"value", "lon":"value" } ] 

¿Cómo puedo hacerlo bien?

He intentado algo como esto, pero sin suerte.

 // get stored JSON object with saved positions String jsonDataString = this.getSharedPreferencesStringValue(ctx, "positions", "last_positions"); if (jsonDataString != null) { Log.i(AppHelper.APP_LOG_NAMESPACE, "JSON DATA " + jsonDataString); JSONObject jsonData = new JSONObject(jsonDataString); jsonData.put("lat", lat.toString()); jsonData.put("lon", lon.toString()); jsonData.put("city", city); jsonData.put("street", street); jsonData.put("date", appHelper.getActualDateTime()); jsonData.put("time", appHelper.getActualDateTime()); this.setSharedPreferencesStringValue(ctx, "positions", "last_positions", jsonData.toString()); } else { this.setSharedPreferencesStringValue(ctx, "positions", "last_positions","{}"); } 

Gracias por cualquier consejo.

Creo que la manera más fácil de lograr eso sería usar Gson .

Si utiliza gradle, puede agregarlo a sus dependencias

 compile 'com.google.code.gson:gson:2.2.4' 

Para usarlo es necesario definir clases para los objetos que se deben cargar. En su caso sería algo como esto:

 // file MyObject.java public class MyObject { List<Coord> results = new ArrayList<Coord>(); public static class Coord { public double lat; public double lon; } 

A continuación, sólo tiene que usar para ir a / desde Json siempre que lo necesite:

 String jsonDataString = this.getSharedPreferencesStringValue(ctx, "positions", "last_positions"); Gson gson = new Gson(); MyObject obj = gson.fromJson(jsonDataString, MyObject.class); // Noew obj contains your JSON data, so you can manipulate it at your will. Coord newCoord = new Coord(); newCoord.lat = 34.66; newCoord.lon = -4.567; obj.results.add(newCoord); String newJsonString = gson.toJson(obj); 

SharedPreferences sólo puede almacenar tipo básico, como String, entero, largo, … por lo que no puede utilizarlo para almacenar objetos. Sin embargo, puede almacenar la cadena Json, utilizando sharedPreferences.putString()

  • Mejor manera de determinar si existe un valor en el feed de JSON
  • Cómo analizar Json Array con gson en android
  • Gson Array de deserialización de matrices
  • Android paginada lista sin fin no funciona
  • Convención de nomenclatura con la serialización / deserialización de Firebase?
  • Analiza JSON en una salida amigable de ListView
  • Cómo comprobar el doble valor está vacío o no
  • Cómo ignorar un elemento JSON en Android Retrofit
  • Cómo pasar el objeto JSON a una nueva actividad
  • Obtención de datos de Mysql DB a listView utilizando JSON y PHP
  • JSONArray respuesta con Volley para Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.