Что означает org.json.JSONException в Android?

Я разрабатываю приложение объекта JSON, которое возвращает данные в ListView.

В этом параметре необходимо передать Uid пользователя.

Мой код для асинхронности:

class  AsyncCallWebServicereceiveHistory extends AsyncTask<String, String, String>
{
    ProgressDialog progressDialog;

    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
        progressDialog = new ProgressDialog(ReceiveHistory.this);
        progressDialog.setTitle("Loading");
        progressDialog.setMessage("Please wait");
        progressDialog.setCancelable(false);
        progressDialog.setIndeterminate(true);
        progressDialog.show();
    }

    @Override
    protected String doInBackground(String... aurl)
    {
        Log.v("receiveHistory","Do in BG-1");
        uid=global.get_user_id();
        try
        {
            HttpPost postMethod = new HttpPost("http://demo1.idevtechnolabs.com/RChatAPI/receive_history.php");

            List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
            postParameters.add(new BasicNameValuePair("uemail", uid));
            BufferedReader bufferedReader = null;

            HttpClient client = new DefaultHttpClient();
            HttpResponse response = null;

            response = client.execute(postMethod);
            final int statusCode = response.getStatusLine().getStatusCode();

            Log.v("Album ::","Response:::--->"+response.toString());
            Log.v("Album ::","Status Code:::--->"+statusCode);

            bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
            StringBuffer stringBuffer = new StringBuffer("");
            String line = "";
            String LineSeparator = System.getProperty("line.separator");
            while ((line = bufferedReader.readLine()) != null)
            {
                stringBuffer.append(line + LineSeparator);
            }
            bufferedReader.close();

            //-------------CONVERT DATA TO JSON---------------------------------

            try
            {
                String myjsonstring = stringBuffer.toString();

                JSONArray jsonArray = new JSONArray(myjsonstring);

                JSONObject jsonObj = null;

                jsonObj = jsonArray.getJSONObject(0);
                code = jsonObj.getString("code");
                receiveMsgData.clear();

                Log.v("Home ::","Code:::--->"+code);

                code="0";
                if(code.equals("0"))
                {
                    for(int i=0; i<jsonArray.length();i++)
                    {

                            jsonObj = jsonArray.getJSONObject(i);
                            uname=jsonObj.getString("name");
                            uage = jsonObj.getString("age");
                            usex = jsonObj.getString("sex");
                            body = jsonObj.getString("country");
                            text= jsonObj.getString("text");

                            HashMap<String, String> tmp_album = new HashMap<String, String>();
                            tmp_album.put("receive_data", "Text");
                            Log.v("receive History","receive Data");
                            receiveMsgData.add(tmp_album);

                    }
                }
                catch (Exception e)
                {
                    Log.v("Home ::","Call JSON Exception in get Album in List--->"+e.toString());
                    e.printStackTrace();
                }
            }
            catch (Exception e)
            {
                Log.v("Exception: Get get Album in List","Name-"+e.toString());
                e.printStackTrace();
            }

            return code;
        }

        @Override
        protected void onPostExecute(String code)
        {
            if(code.equals("0"))
            {
                Receive_History_Custom_Adapter adapter = new Receive_History_Custom_Adapter(getApplicationContext(), receiveMsgData);
                lv.setAdapter(adapter);

            }
            else
            {
                Toast.makeText(getApplicationContext(), "Data not found", Toast.LENGTH_SHORT).show();
            }

            try
            {
                progressDialog.dismiss();
                progressDialog = null;
            }
            catch (Exception e)
            {
                // nothing
            }
        }
    }
}

И я получил следующее исключение:

Call JSON Exception in get Album in List--->org.json.JSONException: Value [] at 0 of type org.json.JSONArray cannot be converted to JSONObject

Мой ответ Json:

[
    {
        "code":"0", "user_id":"21", "msg_id":"115", "name":"Sagar", "age":"18", "sex":"Male", "country":
        " India", "text":"hi", "photo":"demo.idevtechnolabs.com", "cnt":"1"
    },
    {
        "code":"0", "user_id":"18", "msg_id":"114", "name":"Ramani", "age":"20", "sex":"Male", "country":
        "Pakistan", "text":"hi", "photo":"demo.idevtechnolabs.com", "cnt":"1"
    }
]

Может ли кто-нибудь сказать мне, в чем причина этого и как я могу решить эту проблему, пожалуйста.

Заранее спасибо!


person Nirav Dabhi    schedule 02.04.2014    source источник
comment
опубликуйте свой ответ json, если можете   -  person Pararth    schedule 02.04.2014
comment
Value [] at 0 of type org.json.JSONArray cannot be converted to JSONObject Ваш json - это JSONArray, но вы пытаетесь преобразовать его в JSONObject   -  person Raghunandan    schedule 02.04.2014
comment
Хорошо, тогда как я могу решить эту проблему @Raghunandan   -  person Nirav Dabhi    schedule 02.04.2014
comment
См. Мой отредактированный вопрос @ user2450263   -  person Nirav Dabhi    schedule 02.04.2014
comment
@NiravDabhi уверен, что это полный json, и опубликуйте полную трассировку стека и 2 цикла for без необходимости for(int i=0; i<jsonArray.length();i++){for(int i=0; i<4;i++)   -  person Raghunandan    schedule 02.04.2014
comment
@NiravDabhi избавься от for(int i=0; i<4;i++)   -  person Raghunandan    schedule 02.04.2014
comment
да, я только что поставил это для тестирования, но я уже удалил его @Raghunandan Но ошибка другая.   -  person Nirav Dabhi    schedule 02.04.2014
comment
@NiravDabhi, затем опубликуйте полученную ошибку.   -  person Raghunandan    schedule 02.04.2014
comment
Я уже писал об ошибке в вопросе. @Рагунандан   -  person Nirav Dabhi    schedule 02.04.2014
comment
@NiravDabhi, ты сказал другую ошибку. Я думал, что это другая ошибка, чем твоя предыдущая   -  person Raghunandan    schedule 02.04.2014
comment
@NiravDabhi это поможет, если вы будете обновлять вопрос, вы должны :) ?! с точным кодом, который вы используете, и полным logcat -> с номером строки ошибки, которую вы получаете   -  person Pararth    schedule 02.04.2014
comment
Ошибка заключается в том, что JSONArray не может быть преобразован в JSONObject. в строке jsonObj = jsonArray.getJSONObject(0); Но я не знаю, как это решить.   -  person Nirav Dabhi    schedule 02.04.2014
comment
@NiravDabhi Нет, это не твоя проблема. Ваш код в порядке, если вы действительно получаете указанный ответ json. Проверьте свой ответ еще раз — что вы получите в myjsonstring. Выложи полный логкэт. Я попробовал ваш код с этим json, он работает   -  person Pararth    schedule 02.04.2014


Ответы (1)


Я думаю, вы пытаетесь добавить каждый элемент из JSONArray в список сообщений, если код этого элемента равен 0. Если это так, ваш код неверен и его проще переписать, чем просто объяснить:

try {
    String myjsonstring = stringBuffer.toString();
    JSONArray jsonArray = new JSONArray(myjsonstring);
    receiveMsgData.clear();
    for (int i = 0; i < jsonArray.length(); i++) {
        if (jsonArray.getJSONObject(i).getInt("code") == 0) {
            JSONObject data = jsonArray.getJSONObject(i);
            HashMap<String, String> tmp_album = new HashMap<String, String>();
            tmp_album.put("name", data.getString("name"));
            tmp_album.put("age", data.getString("age"));
            tmp_album.put("sex", data.getString("sex"));
            tmp_album.put("country", data.getString("country"));
            tmp_album.put("text", data.getString("text"));
            receiveMsgData.add(tmp_album);
        }
    }

} catch (Exception e) {
    Log.v("Home ::", "Call JSON Exception in get Album in List--->" + e.toString());
    e.printStackTrace();
}

Здесь мы перебираем JSONArray и проверяем, равно ли code 0. Если он равен, мы помещаем необходимые поля во временный HashMap и затем добавляем его в список сообщений.

person nikis    schedule 02.04.2014
comment
0 - это не int, это строка. Можете ли вы помочь мне в этом. Если код возвращает 0, данные должны быть проходными. - person Nirav Dabhi; 02.04.2014
comment
@NiravDabhi Просто попробуйте этот код. Строка 0 может быть проанализирована до int, поэтому мы можем использовать getInt - person nikis; 02.04.2014
comment
Он возвращает Null как код 0, поэтому исключение такое же. - person Nirav Dabhi; 02.04.2014
comment
@NiravDabhi В таком случае покажите точное значение myjsonstring - person nikis; 02.04.2014
comment
Можете ли вы объяснить мне, в чем точная причина этой ошибки, потому что я много пробовал, но все время получал одну и ту же ошибку. - person Nirav Dabhi; 02.04.2014