我的代码应检查LatLng
是否在当前LatLng
的3000米范围内。如果是,程序应该在地图上放置一个标记。但由于某种原因,它陷入无限for
循环。
public void onStart() {
...
Log.d("how big is compareloc", "size "+compareLocations().size());// outputs : 4
for(int mm=0;mm<compareLocations().size();mm++){
HashMap<String, LatLng> test = compareLocations().get(mm);
Log.d("LatLng positon", "marker pos "+test.get(TAG_LATLNG));
if(test.get(TAG_LATLNG)!=null){
googleMap.addMarker(new MarkerOptions().position(test.get(TAG_LATLNG)).title("test"));
}
}
...
}
这是我的compareLocations(),它将我的latlng与latlngs列表进行比较:
public ArrayList<HashMap<String, LatLng>> compareLocations(){
LatLng mLocation;
gps = new GPSTracker(getActivity());
if(gps.canGetLocation()) {
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
mLocation = new LatLng(latitude, longitude);
Location mylocation = new Location("Test1");
mylocation.setLatitude(mLocation.latitude);
mylocation.setLongitude(mLocation.longitude);
mdatabase.open();
Cursor cCompare=mdatabase.getAllItems();
for(int melon=0;melon<cCompare.getCount();melon++){
HashMap<String, LatLng> points = new HashMap<String, LatLng>();
double DBlat = mdatabase.getlat(melon);
double DBlong = mdatabase.getlong(melon);
LatLng myco = new LatLng(DBlat, DBlong);
Location location = new Location("Test");
location.setLatitude(myco.latitude);
location.setLongitude(myco.longitude);
if(mylocation.distanceTo(location)<=3000){
points.put(TAG_LATLNG, myco);
Log.d("Checking distance", "distance less than 300 meters");
}else{
Log.d("Checking distance", "distance is greater than 300 meters");
}
closelist.add(points);
}
mdatabase.close();
} else {
gps.showSettingsAlert();
}
return closelist;
}
答案 0 :(得分:0)
对compareLocations()
的每次调用都会向某些closelist
添加条目。它不断增长和增长,for
循环永远不会终止。
你可能想要
只调用compareLocations()
一次并缓存结果
在每次调用closeList
时重新开始构建compareLocations()
,而不是附加到某个现有列表