从SharedPreference读取和解析JSONArray字符串时出错

时间:2018-10-30 05:58:01

标签: android json sharedpreferences jsonexception

我已经将JSONArray作为字符串存储在SharedPreference中。这就是我的JSONObject

JSONObject info = new JSONObject();
        try {
            info.put("name", full_name);
            info.put("phone", foodie_contact);                    
            info.put("no_people", no_peoples);
        } catch (JSONException e) {
            e.printStackTrace();
        }  

我将这个对象存储在Array中,并将数组存储在SharedPreference中,作为

JSONArray array=new JSONArray();
            array.put(info.toString());
            alert.noInternetAlert(getActivity());
            edit=addqueuetemp.edit();
            edit.putString("queuedata",array.toString());
            edit.apply();  

现在,我从SharedPreference中获取JSONArray并将其解析为

try {
                JSONArray array=new JSONArray(addqueuetemp.getString("queuedata","[]"));
                for(int i=0;i<array.length();i++){
                    JSONObject obj=array.getJSONObject(i+1);
                    Log.i("OBJECT",obj.toString());
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }  

从“首选项”中读取后得到的字符串格式是
 ["{\"name\":\"payal\",\"phone\":\"7427427427\",\"no_people\":\"5\"}"]
我收到错误消息,
Value {"name":"payal","phone":"7427427427","no_people":"5"} at 0 of type java.lang.String cannot be converted to JSONObject
如何解决呢?实际问题在哪里?

3 个答案:

答案 0 :(得分:1)

尝试更改

array.put(info.toString());

array.put(info);

您想将对象保存在array中,但实际上您正在将String保存在array中

答案 1 :(得分:1)

您将String而不是JSONArray放入JSONObject

array.put(info.toString());

这就是为什么您只能以String的身份获得它。

删除该.toString(),它将起作用

答案 2 :(得分:0)

要将字符串转换为json数组,您需要使用以下代码。

JsonParser jsonParser = new JsonParser();
JSONArray jo = (JSONArray)jsonParser.parse(json);