【问题标题】:Android - how to add JSON object to sharedPreferences?Android - 如何将 JSON 对象添加到 sharedPreferences?
【发布时间】:2014-07-06 04:38:51
【问题描述】:

我想将数据附加到现有的 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","{}");                  
}

感谢您的任何建议。

【问题讨论】:

  • 您在 SharedPreferences 中保存完整 JSON 对象的目的是什么?
  • 问题是关于创建 JSON 结构的。不是为了在共享首选项中保存 JSON 字符串。我认为这是在 Android 中使用 SQL 的更简单的解决方案。
  • 创建 JSON 结构?你是什​​么意思?
  • 我想将新对象附加到旧对象,以获得像我的问题中一样的 JSON 结构。
  • 你从来没有解释过你的代码出了什么问题。

标签: android json


【解决方案1】:

SharedPreferences 只能存储基本类型,比如String、integer、long,...所以你不能用它来存储对象。但是,您可以存储 Json 字符串,使用 sharedPreferences.putString()

【讨论】:

  • 是的,我在使用 jsonData.toString() 保存之前将创建的 JSON 转换为字符串。问题是关于创建 JSON 结构。不是为了在共享首选项中保存 JSON 字符串。
  • 我不明白,抱歉,您想编辑 JSON 对象并编辑 sharedPreferences 中的值?
【解决方案2】:

我认为更简单的方法是使用Gson

如果你正在使用 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;
}

然后只需在需要时使用它来往/从 Json:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 2011-11-21
    • 2022-01-27
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多