有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

对于API9,java ArrayList<HashMap<String,String>>无法正确转换为JSONArray

我在将ArrayList存储到共享首选项中时遇到问题。我决定将ArrayList<HashMap<String, String>>转换成JSONArray,这样我下次需要时可以解析JSON,因为我无法存储ArrayList>;作为字符串,并将其恢复为原始形式

现在发生的事情是ArrayList被成功地转换为JSON格式,用于我在API 19中运行的设备,但奇怪的是,对于在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) 个答案

  1. # 1 楼答案

    你似乎在SharedReferences中存储了数组列表

    SharedReferences允许存储字符串,所以像这样使用可能会帮助您

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

    这很好