org.json.JSONException: индекс 0 вне диапазона [0..0) Как решить эту проблему? - PullRequest
0 голосов
/ 06 апреля 2019

Я столкнулся с этой проблемой в последние несколько дней после добавления API Google Maps в проект. Я сделал все, включил бесплатный пробный биллинг, а также сделал много изменений, касающихся кода, но ничего не получил, после этого я добавил API Google Place Place, но в результате панель поиска внезапно исчезла.

В этом коде отображается ошибка:

private void drawRoute(final LatLng yourLocation, String address) {
        mService.getGeoCode(address).enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {
                try{
                    JSONObject jsonObject=new JSONObject(response.body().toString());

                    String lat=  ((JSONArray)jsonObject.get("results"))
                            .getJSONObject(0)
                            .getJSONObject("geometry")
                            .getJSONObject("location")
                            .get("lat").toString();

                    String lng=  ((JSONArray)jsonObject.get("results"))
                            .getJSONObject(0)
                            .getJSONObject("geometry")
                            .getJSONObject("location")
                            .get("lng").toString();

                    LatLng orderLocation=new LatLng(Double.parseDouble(lat),Double.parseDouble(lng));

                    Bitmap bitmap= BitmapFactory.decodeResource(getResources(),R.drawable.locationmarker);
                    bitmap=Common.scaleBitmap(bitmap,70,70);

                    MarkerOptions marker=new MarkerOptions().icon(BitmapDescriptorFactory.fromBitmap(bitmap))
                            .title("Order of "+Common.currentRequest.getPhone())
                            .position(orderLocation);
                    mMap.addMarker(marker);

                    //draw route
                    mService.getDirections(yourLocation.latitude+","+yourLocation.longitude,
                            orderLocation.latitude+","+orderLocation.longitude)
                            .enqueue(new Callback<String>() {
                                @Override
                                public void onResponse(Call<String> call, Response<String> response) {
                                    new ParserTask().execute(response.body().toString());
                                }

                                @Override
                                public void onFailure(Call<String> call, Throwable t) {

                                }
                            });


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

            @Override
            public void onFailure(Call<String> call, Throwable t) {

            }
        });
    }

1 Ответ

0 голосов
/ 06 апреля 2019

Полагаю, ошибка происходит в этом месте:

((JSONArray)jsonObject.get("results"))
    .getJSONObject(0)

Вы должны рассмотреть случай, когда свойство results содержит только пустой массив. Для этого вы можете присвоить массив results переменной, проверить ее длину, а если она 0, сделать что-то еще, например, немедленный возврат (ничего не делать) или показ сообщения пользователю.

JSONArray results = (JSONArray)jsonObject.get("results");
if (results.length() == 0) {
    // handle this case, for example
    return;
}

// There is at least one result
String lat= results
    .getJSONObject(0)
    .getJSONObject("geometry")
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...