Ошибка при чтении и разборе строки JSONArray из SharedPreference - PullRequest
0 голосов
/ 30 октября 2018

Я сохранил 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();
        }  

И я сохраняю этот объект в массиве и массиве в SharedPreference как

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

Теперь я беру JSONArray из SharedPreference и анализирую его как

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 голосов
/ 30 октября 2018

Для преобразования вашей строки в массив json вам нужно использовать следующий код.

JsonParser jsonParser = new JsonParser();
JSONArray jo = (JSONArray)jsonParser.parse(json);
0 голосов
/ 30 октября 2018

Вы помещаете String в ваш JSONArray, а не JSONObject:

array.put(info.toString());

Вот почему вы можете получить его только как String.

Удалите это .toString(), и оно будет работать

0 голосов
/ 30 октября 2018

Попробуйте изменить

array.put(info.toString());

до

array.put(info);

Как вы хотите сохранить объект в массиве, но на самом деле вы сохраняете String в массиве

...