Анализатор JSON: ошибка анализа данных org.json.JSONException: тип org.json.JSONArray не может быть преобразован - PullRequest
0 голосов
/ 12 января 2019
private class BackTask extends AsyncTask<Void, Void, Void> {
    protected void onPreExecute() {
        super.onPreExecute();
        dialog.show();
    }
    String url = "http://learnd.cf/getOtp.php";
    protected Void doInBackground(Void... params) {
        List<NameValuePair> list = new ArrayList<NameValuePair>();

        list.add(new BasicNameValuePair("username",USERNAME));
        list.add(new BasicNameValuePair("phone",PHONE));
        // getting JSON Object
        // Note that create datas url accepts POST method
        JSONObject json = (JSONObject) jsonParser.makeHttpRequest(url,"GET", list);

        // check log cat fro response
        Log.e("Create Response", json.toString());

        // check for success tag


        return null;
    }

    protected void onPostExecute(Void result) {
        dialog.dismiss();
    }
}

2019-01-12 13:09:36.585 11371-11569/com.example.rajeeshkv.learn_d E/JSON Parser:
    Error parsing data org.json.JSONException: Value 
    [  
        {  
            "temp_id":"12",
            "temp_clg_id":"1",
            "temp_course_id":"1",
            "temp_stud_name":"a",
            "temp_username":"a",
            "temp_password":"a",
            "temp_email":"a",
            "temp_phone":"4",
            "temp_gender":"Male",
            "temp_otp":"2060"
        }
    ]
    of type org.json.JSONArray cannot be converted to JSONObject

Это фоновая задача для передачи имени пользователя и телефона в базу данных, получения соответствующей строки из базы данных и передачи ее обратно на android с помощью парсера json. Но я получаю следующую ошибку. Я много пытался решить эту проблему. Есть ли способ это исправить?

Ответы [ 4 ]

0 голосов
/ 12 января 2019

Попробуйте использовать

Volley

библиотека и отправить запрос как StringRequest.

0 голосов
/ 12 января 2019

Как показывают фигурные скобки ([]), предоставленный вами json - это массив json, а не объект json.

Попробуйте вместо этого

    JSONObject json = (JSONObject) ((JSONArray)jsonParser.makeHttpRequest(url,"GET", list)).getJSONObject(0);
0 голосов
/ 12 января 2019

2019-01-12 13: 09: 36.585 11371-11569 / com.example.rajeeshkv.learn_d E / JSON Parser: Ошибка анализа данных org.json.JSONException: Value [{"temp_id": "12", " temp_clg_id ":" 1" , "temp_course_id": "1", "temp_stud_name": "а", "temp_username": "а", "temp_password": "а", "temp_email": "а", "temp_phone" : "4", "temp_gender": "Male", "temp_otp": "2060"}] типа org.json.JSONArray невозможно преобразовать в JSONObject

Это означает, что возвращаемое значение является JSONArray. Но вы пытаетесь преобразовать его в JSONObject, что невозможно.

Попробуйте

JSONArray jsonArray = (JSONArray) jsonParser.makeHttpRequest(url,"GET", list);
JSONObject json = jsonArray.get(0);

Я использовал jsonArray.get(0), предполагая, что в jsonArray будет только один объект. Если есть еще элементы, которые вы должны повторить, используйте цикл for, чтобы получить все значения в ответе.

0 голосов
/ 12 января 2019

Я думаю, что в запросе get ваше имя пользователя и телефон должны быть в хэш-карте, а не в списке BasicNameValuePair

...