陷入无限循环

时间:2014-05-08 13:13:33

标签: java android google-maps gps

我的代码应检查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;
    }

1 个答案:

答案 0 :(得分:0)

compareLocations()的每次调用都会向某些closelist添加条目。它不断增长和增长,for循环永远不会终止。

你可能想要

  • 只调用compareLocations()一次并缓存结果

  • 在每次调用closeList时重新开始构建compareLocations(),而不是附加到某个现有列表