【问题标题】:Progressdialog freeze when multiple marker showing on map in androidandroid 地图上显示多个标记时进度对话框冻结
【发布时间】:2013-06-29 06:16:48
【问题描述】:

我在 google maps API V2 android 中显示多个标记。在我的代码下面,progressdialog 挂起,listmodelUserTrackings 有 448 个数据显示在地图上。请帮我解决这个问题。提前谢谢

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();

}

【问题讨论】:

  • 为什么不使用 asynctask istead?
  • 你得到地图上的所有标记了吗?进度对话框会消失吗?
  • 是的,我已经在地图中获得了所有标记,然后进度对话框关闭,但进度对话框挂起
  • 使用 asyncTask 代替处理程序并关闭 onPostExecute 中的对话框 ...这可能有效..

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


【解决方案1】:

你的代码最大的问题是你在主线程上做网络操作。

移动此代码:

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

进入后台线程。

【讨论】:

  • 是的,谢谢,这是影响进度对话框的主要因素。非常感谢
猜你喜欢
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 2018-04-28
相关资源
最近更新 更多