org.json.JSONException:索引0超出范围[0..0)如何解决?

时间:2019-04-06 09:00:25

标签: java android google-maps

在项目中添加google maps api之后的几天里,我一直面临这个问题。我已完成所有工作,启用了免费试用计费,并且还进行了许多有关代码的更改,但我一无所获,此后,我添加了google place api,但结果是搜索栏突然消失了。

在此代码中显示错误:

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 :(得分:0)

我猜这个地方发生了错误:

((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")
    ...