Не получить JSONException для значения - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь разобрать ответ JSON в Android с помощью залпа.Но я получаю JSON исключение Нет значения для последнего тока.Я могу проанализировать текущий объект, но не последний текущий.Ниже приведен ответ json.

{"status":false,"result":
[{"current": 
[{"Latitude":"19.1021","Longitude":"72.9153","Datetime":"2018\/01\/01 07:23:53"}, 
{"Latitude":"19.0766","Longitude":"72.9009","Datetime":"2018\/06\/05 00:57:49"}]}, 
{"lastcurrent": 
[{"Latitude":"19.1022","Longitude":"72.9152","Datetime":"2018\/01\/01 07:23:53"}, 
{"Latitude":"19.0766","Longitude":"72.901","Datetime":"2018\/06\/05 00:57:49"}  
]}]}

Ниже приведен код Android для анализа json с использованием залпа.

public void onResponse(String response) {

                        System.out.println("Response: "+response);

                        try{
                            jsonObject = new JSONObject(response);

                            jsonArray = jsonObject.getJSONArray("result");

                            String status = jsonObject.getString("status");
                            System.out.println("Status=="+status);
                            //System.out.println(jsonArray.length());
                            for (int i = 0; i<jsonArray.length(); i++){

                                jsonObject1 = jsonArray.getJSONObject(i);

                                jsonArray1 = jsonObject1.getJSONArray("current");
                                for (int j = 0; j<jsonArray1.length();j++)
                                {
                                    jsonObject2 = jsonArray1.getJSONObject(j);


                                    System.out.println("current == "+ jsonObject2.getString("Latitude") );


                                }


                                jsonArray2 = jsonObject1.getJSONArray("lastcurrent");
                                for (int k =0; k<jsonArray2.length();k++)
                                {
                                    jsonObject3 = jsonArray2.getJSONObject(k);

                                    System.out.println("last Current=="+jsonObject3.getString("Latitude"));
                                }

                            }
                        }catch (JSONException e){
                            e.printStackTrace();
                        }
                    }

Ошибка Logcat:

06-07 12:05:57.023 17214-17214/com.abhi.smoothmapmarkers I/System.out: Status==false
current ==19.1021
current ==19.0766
06-07 12:05:57.024 17214-17214/com.abhi.smoothmapmarkers I/System.out: current ==19.1008
current ==18.9592
current ==19.0943
06-07 12:05:57.025 17214-17214/com.abhi.smoothmapmarkers W/System.err: org.json.JSONException: No value for lastcurrent

Пожалуйста, помогитемне.Помощь приветствуется.Я хочу также получить широту от lastcurrent.Как я могу этого добиться .??

Ответы [ 3 ]

0 голосов
/ 07 июня 2018
Use .has(String) and .isNull(String) 

Like:

if (jsonObject1.has("lastcurrent") && !jsonObject1.isNull("lastcurrent")) {
        // Do something with Array
      }
0 голосов
/ 07 июня 2018

Используйте это как-то так

Это будет демонстративно работать для вас

for (int i = 0; i < jsonArray.length(); i++) {

                JSONObject jsonObject1 = jsonArray.getJSONObject(i);
                if (i < 1) {
                JSONArray jsonArray1 = jsonObject1.getJSONArray("current");

                    for (int j = 0; j < jsonArray1.length(); j++) {
                        JSONObject jsonObject2 = jsonArray1.getJSONObject(j);
                        System.out.println("current == " + jsonObject2.getString("Latitude"));

                    }
                }
                if (i > 0) {
                    JSONArray jsonArray2 = jsonObject1.getJSONArray("lastcurrent");
                    for (int k = 0; k < jsonArray2.length(); k++) {
                        JSONObject jsonObject3 = jsonArray2.getJSONObject(k);

                        Log.e("Last current", "last Current==" + jsonObject3.getString("Latitude"));
                    }
                }

            }
0 голосов
/ 07 июня 2018

Вы пытаетесь найти массив, который недоступен, например, lastcurrent в первом объекте и current во втором объекте.

Проверьте перед синтаксическим анализом, как этот

if(jsonObject1.has("lastcurrent")){
    jsonArray1 = jsonObject1.getJSONArray("lastcurrent");
    ...
    ...

Эта проверка должна выполняться и для массива current.

Решение должно выглядеть следующим образом

...
...
if(jsonObject1.has("current")){
    jsonArray1 = jsonObject1.getJSONArray("current");
    for (int j = 0; j<jsonArray1.length();j++)
    {
        jsonObject2 = jsonArray1.getJSONObject(j);
        System.out.println("current == "+ jsonObject2.getString("Latitude") );
    }
}

if(jsonObject1.has("lastcurrent")){
    jsonArray2 = jsonObject1.getJSONArray("lastcurrent");
    for (int k =0; k<jsonArray2.length();k++)
    {
        jsonObject3 = jsonArray2.getJSONObject(k);
        System.out.println("last Current=="+jsonObject3.getString("Latitude"));
    }
}
...
...
...