Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-如何将JSON对象添加到SharedReferences?_Android_Json - Fatal编程技术网

Android-如何将JSON对象添加到SharedReferences?

Android-如何将JSON对象添加到SharedReferences?,android,json,Android,Json,我想将数据附加到现有的JSON对象中,并将数据作为字符串保存到具有以下结构的共享首选项中 "results":[ { "lat":"value", "lon":"value" }, { "lat":"value", "lon":"value" } ] 我怎样才能把它做好 我试过这样的东西,但运

我想将数据附加到现有的JSON对象中,并将数据作为字符串保存到具有以下结构的共享首选项中

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

          }
        ]
我怎样才能把它做好

我试过这样的东西,但运气不好

// 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","{}");                  
}

谢谢你的建议

SharedReferences只能存储基本类型,例如字符串、整数、长。。。所以你不能用它来存储对象。但是,您可以使用
SharedReferences.putString()

存储Json字符串,我认为更简单的方法是使用

如果您使用的是gradle,则可以将其添加到依赖项中

compile 'com.google.code.gson:gson:2.2.4'
要使用它,您需要为需要加载的对象定义类。在您的情况下,可能是这样的:

// file MyObject.java
public class MyObject {
    List<Coord> results = new ArrayList<Coord>();    

    public static class Coord {
        public double lat;
        public double lon;
}

关于在SharedReferences中保存完整JSON对象的内容,问题是关于创建JSON结构。不是关于在共享prefs中保存JSON字符串的目的。我认为在Android中使用SQL是最简单的解决方案。创建JSON结构?这是什么意思?我想将新对象附加到旧对象,以获得像我的问题中那样的JSON结构。您从未解释过代码的错误。是的,在使用jsonData.toString()保存之前,我将创建的JSON转换为字符串。问题在于如何创建JSON结构。不是关于在shared prefs中保存JSON字符串的目的。我不明白,抱歉,您想编辑JSON对象并在SharedReferences中编辑值吗?
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);