获取方向并获取路径android studio

时间:2018-05-16 08:25:33

标签: json animation directory points placeautocompletefragment

我正在尝试选择自动填充表单并绘制一个路径,当我从自动填充中选择一个地方时,应用程序崩溃了。 请看

---------崩溃的开始

  

E / AndroidRuntime:致命异常:主要                         程序:com.saoutimohamed.tewsila,PID:5924                         java.lang.IllegalStateException:没有包含的点                             在com.google.android.gms.common.internal.Preconditions.checkState(未知   来源:8)                             在com.google.android.gms.maps.model.LatLngBounds $ Builder.build(未知   来源:10)                             在com.saoutimohamed.tewsila.WelcomeDriver $ 4.onResponse(WelcomeDriver.java:271)                             at retrofit2.ExecutorCallAdapterFactory $ ExecutorCallbackCall $ 1 $ 1.run(ExecutorCallAdapterFactory.java:70)                             在android.os.Handler.handleCallback(Handler.java:789)                             在android.os.Handler.dispatchMessage(Handler.java:98)                             在android.os.Looper.loop(Looper.java:164)                             在android.app.ActivityThread.main(ActivityThread.java:6938)                             at java.lang.reflect.Method.invoke(Native Method)                             在com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:327)                             在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)       申请已终止。

logcat并告诉我我的代码有什么问题

这是代码

private void getDirection() {

        String requestApi;
        try {
            requestApi = "https://maps.googleapis.com/maps/api/directions/json?" +
                    "mode=driving&" +
                    "transit_routing_preference=less_driving&" +
                    "origin=" + Common.mLastLocation.getLatitude() + "," + Common.mLastLocation.getLongitude() + "&" +
                    "destination=" + lat+","+lng + "&" +
                    "key=" + getResources().getString(R.string.google_direction_api);
            Log.d("SAOUTI", 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");
                                for (int i = 0; i < jsonArray.length(); i++) {
                                    JSONObject route = jsonArray.getJSONObject(i);
                                    JSONObject poly = route.getJSONObject("overview_polyline");
                                    String polyline = poly.getString("points");
                                    polyLineList = decodePoly(polyline);
                                }
                                LatLngBounds.Builder builder = new LatLngBounds.Builder();
                                for (LatLng latLng : polyLineList)
                                    builder.include(latLng);
                                LatLngBounds bounds = builder.build();
                                CameraUpdate mCameraUpdate = CameraUpdateFactory.newLatLngBounds(bounds, 5);
                                mMap.animateCamera(mCameraUpdate);

                                polylineOptions = new PolylineOptions();
                                polylineOptions.color(Color.GRAY);
                                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"));

                                ValueAnimator polyLineAnimator = ValueAnimator.ofInt(0, 100);
                                polyLineAnimator.setDuration(2000);
                                polyLineAnimator.setInterpolator(new LinearInterpolator());
                                polyLineAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                                    @Override
                                    public void onAnimationUpdate(ValueAnimator valueAnimator) {
                                        List<LatLng> points = greyPolyline.getPoints();
                                        int percentValue = (int) valueAnimator.getAnimatedValue();
                                        int size = points.size();
                                        int newPoints = (int) (size * (percentValue / 100.0f));
                                        List<LatLng> p = points.subList(0, newPoints);
                                        blackPolyline.setPoints(p);
                                    }
                                });
                                polyLineAnimator.start();

                                carMarker = mMap.addMarker(new MarkerOptions().position(currentPosition)
                                        .flat(true)
                                        .icon(BitmapDescriptorFactory.fromResource(R.mipmap.tewsila_car)));
                                handler = new Handler();


                            } catch (JSONException e) {
                                e.printStackTrace();
                                index = -1;
                                next = 1;
                                handler.postDelayed(drawPathRunnable, 3000);
                            }

                        }

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

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
在logcat中没有响应的行是(LatLngBounds bounds = builder.build();)

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,因此将其删除     requestApi中的“ + getResources()。getString(R.string.google_direction_api)”部分。 Perfectlr为我工作。但是我不知道原因。

requestApi = "https://maps.googleapis.com/maps/api/directions/json?" +
                "mode=driving&" +
                "transit_routing_preference=less_driving&" +
                "origin=" + Common.mLastLocation.getLatitude() + "," + Common.mLastLocation.getLongitude() + "&" +
                "destination=" + lat+","+lng + "&" +
                "key=";