Android Google地图折线无法在没有清除RAM的情况下进行绘制

时间:2016-12-23 07:20:55

标签: android google-maps google-polyline

我正在使用谷歌地图开发类似于出租车的应用程序。它有一个拾取和放置位置,然后单击按钮(GO)将绘制它们之间的路线。 This is my activity

我已将最后一个已知位置存储在共享首选项中。因此,当应用程序再次打开时,最后一个已知位置将成为拾取位置。

我的问题是

当我再次打开应用时,the route is not getting drawn,但路线数据是从谷歌下载的 LatLng基准也不为空。

但非常令人惊讶的是,如果我发布手机内存并打开我的应用程序,ALAS就可以了!!!!

到目前为止我所做的事情:

1.我试图垃圾收集(在onDestroy();在绘制路线之前;在绘制路线之后,第一次)。它没有工作。

2.我试图清除应用程序缓存但是,所有应用程序数据(包括我在共享首选项中存储的最后位置)都被删除。应用程序每次都从第一个开始(我每次都要求运行时权限) ;等等。)

3.我甚至尝试删除除我共享的pref之外的所有数据,但没有成功。

这是在单击Go按钮时下载路径数据后调用的代码。

  public void processFinish(List<List<HashMap<String, String>>> result) {
    Log.d("sri","processFinish in Map_Activity");


    Route_Extras.getting_json = false;

    ArrayList<LatLng> points = null;
    PolylineOptions polylineOptions = null;
    MarkerOptions markerOptions = new MarkerOptions();
    if(result != null) {

    if(result.size()<1){
        Toast.makeText(getBaseContext(), "No Points",Toast.LENGTH_SHORT).show();
        return;
    }

        //iterating routes
        for (int i = 0; i < result.size(); i++) {

            Log.d("sri", "Iterating routes " + distance);
            points = new ArrayList<LatLng>();
            polylineOptions = new PolylineOptions();

            //getting the individual route
            List<HashMap<String, String>> path = result.get(i);

            Log.d("sri", "Iterating every points in legs and steps " + distance);

            // Fetching all the points in i-th route
            for (int j = 0; j < path.size(); j++) {
                HashMap<String, String> point = path.get(j);


                if (j == 0) {    // Get distance from the list
                    distance = (String) point.get("distance");
                    Log.d("sri", "Iterating leg " + j + "" + "distance is " + distance);
                    //  dist += Double.valueOf(distance);
                    continue;
                } 
                 else if (j == 1) { // Get duration from the list
                    duration = (String) point.get("duration");
                    Log.d("sri", "Iterating leg " + j + "" + "duration is " + duration);
                    //  dur += Double.valueOf(duration);
                    continue;
                }

                double lat = Double.parseDouble(point.get("lat"));
                double lng = Double.parseDouble(point.get("lng"));

                LatLng position = new LatLng(lat, lng);

                points.add(position);

            }//path -->leg

            // Adding all the points in the route to LineOptions
            Log.d("sri", "Adding all the points in the route to LineOptions");
            polylineOptions.addAll(points);
            polylineOptions.width(6);
            polylineOptions.color(Color.BLUE);

        }//route

        Log.d("sri", "Drawing polyline in the Google Map ");


        // Drawing polyline in the Google Map for the i-th route
        if(polylineOptions!=null){        
         pline = mGoogleMap.addPolyline(polylineOptions);
            if(pline != null){
                Log.d("sri", "if(pline!=null)");
            }

            Log.d("sri", "if(polylineOptions!=null)");
        }

           else{
            Log.d("sri", "if(polylineOptions == null)");
        }
    }
}//process

自从过去10天以来我一直面临这个问题,并且至少搜索了100次并找不到解决方案,因此将其发布在SOO中。

1 个答案:

答案 0 :(得分:0)

试试这个:

PolylineOptions rectLine = new PolylineOptions().width(15).color(ContextCompat.getColor(this,R.color.map_route));
    for (int i = 0; i < directionPoints.size(); i++) {
        rectLine.add(directionPoints.get(i));
    }
    if (newPolyline != null) {
        newPolyline.remove();
    }
    newPolyline = map.addPolyline(rectLine);