我正在使用谷歌地图开发类似于出租车的应用程序。它有一个拾取和放置位置,然后单击按钮(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中。
答案 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);