当多个标记在android中的地图上显示时,Progressdialog冻结

时间:2013-06-29 06:16:48

标签: android progressdialog google-maps-android-api-2

我在google maps API V2 android中显示多个标记。在我的代码中,progressdialog挂起,listmodelUserTrackings有448个数据显示在map.please帮助我解决这个问题。感谢前进

int i=0;
public void showMarker() {
    showProgressDialog();
    final Handler mHandler = new Handler();
    new Thread(new Runnable() {

        @Override
        public void run() {
            while (true) {

                if (i < listmodelUserTrackings.size()) {
                    int pos = i;
                    Log.v("log_tag", "thread  sleep");
                    final double lat = Double
                            .parseDouble(listmodelUserTrackings.get(pos)
                                    .getLAT());
                    final double lng = Double
                            .parseDouble(listmodelUserTrackings.get(pos)
                                    .getLONG());
                    Bundle bundle = new Bundle();
                    bundle.putDouble("lat", lat);
                    bundle.putDouble("longi", lng);

                    mHandler.post(new Runnable() {

                        @Override
                        public void run() {

                            String city = null;
                            try {
                                city = getAddress(lat,lng).get(0).getAddressLine(1);
                            } catch (NullPointerException e) {

                            }
                            if (city != null) {
                                CameraUpdate center = CameraUpdateFactory.newLatLng(new LatLng(
                                        lat,lng));

                                mMap.addMarker(new MarkerOptions().position(
                                        new LatLng(lat,lng)).title(
                                        city));
                                mMap.moveCamera(center);
                            }
                        }
                    });
                    i++;
                } else {
                    mHandler.post(new Runnable() {

                        @Override
                        public void run() {
                            dismissProgressDialog();
                        }
                    });
                    break;
                }
            }
        }
    }).start();

}

1 个答案:

答案 0 :(得分:1)

您的代码最大的问题是您在主线程上进行网络操作。

移动此代码:

String city = null;
try {
    city = getAddress(lat,lng).get(0).getAddressLine(1);
} catch (NullPointerException e) {
}

进入后台线程。