API9中,ArrayList<HashMap<String, String>> 无法正确转换为JSONArray

3

我有一个问题,关于将我的 ArrayList保存到共享首选项中。我决定将 ArrayList<HashMap<String, String>> 转换为 JSONArray,以便下次需要时可以解析JSON,因为我无法将 ArrayList 作为字符串存储并使其恢复为原始形式。

现在的情况是,对于运行在 API 19 上的设备,ArrayList 成功地转换为 JSON 格式,但对于运行在 API 9 的模拟器设备,则无法正常转换。当我查看原因时,发现转换后的字符串格式不正确,导致出现错误。我所说的“格式不正确”是指,它被转换为 [{key:value}] 的格式,而不是 [{"key":"value"}] 的格式,在 JSON 中需要双引号,这导致出现以下错误消息:

org.json.JSONException: Unterminated object at character

这里是代码:

private void storeStatusInSharedPreference(ArrayList<HashMap<String, String>> items){
    SharedPreferences my_prefs = getActivity().getSharedPreferences("my_prefs", getActivity().MODE_PRIVATE);

    JSONArray result = new JSONArray(items);
    my_prefs.edit().putString("test", result.toString()).apply();

}

我不确定其他设备/版本是否会发生同样的情况,因为我只在这两个上进行了测试,所以我没有应用任何API版本检查来处理它。

1个回答

0

你似乎在你的sharedpreferences中存储了数组列表,

Sharedpreferences只允许存储字符串,所以可以像这样使用来帮助你:

private void storeStatusInSharedPreference(ArrayList<HashMap<String, String>> items){
    SharedPreferences my_prefs = getActivity().getSharedPreferences("my_prefs", getActivity().MODE_PRIVATE);

    //JSONArray result = new JSONArray(items);
    my_prefs.edit().putString("test", items.toString()).commit();
}

这将会很好地工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接