org.json.JSONException:没有值for overview_polyLine

问题描述 投票:0回答:1

我正在创建一个应用,该应用绘制了一条从用户当前位置到用户输入的目的地位置的路线。

使用Direction API时,我从API获取数据,但伴随错误“ org.json.JSONException:overview_polyLine无值”


    private void getDirection() {

        // currentPosition = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());
        if (mLastLocation != null) {
            currentPosition = new LatLng (mLastLocation.getLatitude (), mLastLocation.getLongitude ());
        }

        String requestApi;
        try {
            requestApi = "https://maps.googleapis.com/maps/api/directions/json?" + "mode=driving&" + "transit_routing_preference=less_driving&" +
                    "origin=" + currentPosition.latitude + "," + currentPosition.longitude + "&" +
                    "destination=" + destination + "&" +
                    "key=" + getResources ().getString (R.string.google_direction_api);
            Log.d ("Ashutosh", requestApi);
            mService.getPath (requestApi)
                    .enqueue (new Callback<String> () {
                        @Override
                        public void onResponse(Call<String> call, Response<String> response) {
                            try {

                                JSONObject jsonObject = new JSONObject (response.body ().toString ());
                                JSONArray jsonArray = jsonObject.getJSONArray ("routes");
                                JSONObject route = jsonArray.getJSONObject (0);
                                JSONObject poly = route.getJSONObject ("overview_polyLine");
                                String polyline = poly.getString ("points");
                                polyLineList = decodePoly (polyline);
                                if (!polyLineList.isEmpty ()) {
                                    LatLngBounds.Builder builder = new LatLngBounds.Builder ();
                                    for (LatLng latLng : polyLineList) {
                                        builder.include (latLng);
                                    }
                                    LatLngBounds bounds = builder.build ();
                                    CameraUpdate mCameraUpdate = CameraUpdateFactory.newLatLngBounds (bounds, 2);
                                    mMap.animateCamera (mCameraUpdate);


                                }

                                polylineOptions = new PolylineOptions ();
                                polylineOptions.color (Color.BLUE);
                                polylineOptions.width (5);
                                polylineOptions.startCap (new SquareCap ());
                                polylineOptions.endCap (new SquareCap ());
                                polylineOptions.jointType (JointType.ROUND);
                                polylineOptions.addAll (polyLineList);
                                greyPolyline = mMap.addPolyline (polylineOptions);

                                blackpolyLineOptions = new PolylineOptions ();
                                blackpolyLineOptions.color (Color.BLACK);
                                blackpolyLineOptions.width (5);
                                blackpolyLineOptions.startCap (new SquareCap ());
                                blackpolyLineOptions.endCap (new SquareCap ());
                                blackpolyLineOptions.jointType (JointType.ROUND);
                                blackPolyline = mMap.addPolyline (blackpolyLineOptions);

                                mMap.addMarker (new MarkerOptions ()
                                        .position (polyLineList.get (polyLineList.size () - 1))
                                        .title ("Pickup Location"));
                                //Animation
                                ValueAnimator polylineAnimator = ValueAnimator.ofInt (0, 100);
                                polylineAnimator.setDuration (2000);
                                polylineAnimator.setInterpolator (new LinearInterpolator ());
                                polylineAnimator.addUpdateListener (new ValueAnimator.AnimatorUpdateListener () {
                                    @Override
                                    public void onAnimationUpdate(ValueAnimator animation) {
                                        List<LatLng> points = greyPolyline.getPoints ();
                                        int percentValue = (int) animation.getAnimatedValue ();
                                        int size = points.size ();
                                        int new_Points = (int) (size * (percentValue / 100.0f));
                                        List<LatLng> p = points.subList (0, new_Points);
                                        blackPolyline.setPoints (p);
                                    }
                                });
                                polylineAnimator.start ();
                                carMarker = mMap.addMarker (new MarkerOptions ().position (currentPosition)
                                        .flat (true)
                                        .icon (BitmapDescriptorFactory.fromResource (R.drawable.car)));

                                handler = new Handler ();
                                index = -1;
                                next = 1;
                                handler.postDelayed (drawPathRunnable, 3000);

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

                        @Override
                        public void onFailure(Call<String> call, Throwable t) {
                            Toast.makeText (MapsActivity.this, "" + t.getMessage (), Toast.LENGTH_SHORT).show ();
                        }
                    });
        } catch (Exception e) {
            e.printStackTrace ();
        }
    }

我从API获取数据,但由于此错误而无法在google地图上显示。

来自Logcat的错误。

2019-10-15 09:41:23.007 13728-13728/com.example.uber W/System.err: org.json.JSONException: No value for overview_polyLine
2019-10-15 09:41:23.007 13728-13728/com.example.uber W/System.err:     at org.json.JSONObject.get(JSONObject.java:392)
2019-10-15 09:41:23.007 13728-13728/com.example.uber W/System.err:     at org.json.JSONObject.getJSONObject(JSONObject.java:612)
2019-10-15 09:41:23.007 13728-13728/com.example.uber W/System.err:     at com.example.uber.MapsActivity$4.onResponse(MapsActivity.java:299)
2019-10-15 09:41:23.008 13728-13728/com.example.uber W/System.err:     at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70)
2019-10-15 09:41:23.008 13728-13728/com.example.uber W/System.err:     at android.os.Handler.handleCallback(Handler.java:808)
2019-10-15 09:41:23.008 13728-13728/com.example.uber W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:101)
2019-10-15 09:41:23.008 13728-13728/com.example.uber W/System.err:     at android.os.Looper.loop(Looper.java:166)
2019-10-15 09:41:23.008 13728-13728/com.example.uber W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7425)
2019-10-15 09:41:23.008 13728-13728/com.example.uber W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
2019-10-15 09:41:23.008 13728-13728/com.example.uber W/System.err:     at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
2019-10-15 09:41:23.008 13728-13728/com.example.uber W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)

我是android studio的新手。对错误原因的解释将帮助我将来防止错误发生。在此先感谢!

android json google-maps polyline google-maps-direction-api
1个回答
1
投票

键区分大小写。实际密钥名称为overview_polyline,但不是overview_polyLine


-1
投票

似乎您的route JSONObject没有名为overview_polyLine的任何键。

为了防止异常,您需要检查天气密钥是否存在于JSON中。

您可以这样检查:

jsonObjectName。(“ KeyName”)

  JSONObject jsonObject = new JSONObject (response.body ().toString ());

    if(jsonObject.has("routes")){
         JSONArray jsonArray = jsonObject.getJSONArray ("routes");
         JSONObject route = jsonArray.getJSONObject (0);

         if(route.has("overview_polyLine")){
                JSONObject poly = route.getJSONObject ("overview_polyLine");
         }
   }
© www.soinside.com 2019 - 2024. All rights reserved.