【问题标题】:Showing Dialog and updating mapview overlay显示对话框并更新地图视图覆盖
【发布时间】:2012-04-13 18:32:01
【问题描述】:

我有一个扩展 MapActivity 的类。

我使用名为 updateMap 的函数将图钉放置在地图上。图钉放置在基于加载的巴士站列表的位置。

我想在下载停靠点数组时显示一个加载对话框,但我的代码出现错误。我目前弹出对话框并生成一个线程来加载公交路线并更新地图。

经过一些研究,我开始意识到 UI 层无法从单独的线程进行更新。我试过移动东西,但似乎没有任何效果。

任何帮助表示赞赏!

private void updateMap(final int selectedRoute, final boolean isMajor, final boolean isMinor)
{
    dlg = ProgressDialog.show(TransitMap.this, "Updating Map", "Processing... Please wait...");
    new Thread()
    {
        public void run()
        {
            try 
            {
                TransitMap.this.removePins();
                TransitMap.this.addRoutePins(selectedRoute, isMajor, isMinor);
                TransitMap.this.addBusPins(selectedRoute);

                map.post(new Runnable()
                {   
                    public void run()
                    {
                        TransitMap.this.map.postInvalidate();
                    }
                });
            }
            catch(Exception ex)
            {
        }
            // processing done, hide progress dialog
            dlg.dismiss();
        }
    }.start();
}

修改类使用AsyncTask后,我的程序还是崩溃了!

这是 logCat 错误

04-13 15:16:49.217: E/AndroidRuntime(21898): FATAL EXCEPTION: main
04-13 15:16:49.217: E/AndroidRuntime(21898): java.util.ConcurrentModificationException
04-13 15:16:49.217: E/AndroidRuntime(21898):    at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:576)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:44)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at com.google.android.maps.MapView.onDraw(MapView.java:530)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.View.draw(View.java:6971)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.ViewGroup.drawChild(ViewGroup.java:1710)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1437)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.ViewGroup.drawChild(ViewGroup.java:1708)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1437)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.View.draw(View.java:6974)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.widget.FrameLayout.draw(FrameLayout.java:357)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.ViewGroup.drawChild(ViewGroup.java:1710)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1437)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.ViewGroup.drawChild(ViewGroup.java:1708)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1437)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.ViewGroup.drawChild(ViewGroup.java:1708)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1437)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.ViewGroup.drawChild(ViewGroup.java:1708)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1437)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.ViewGroup.drawChild(ViewGroup.java:1708)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1437)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.View.draw(View.java:6974)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.widget.FrameLayout.draw(FrameLayout.java:357)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.ViewGroup.drawChild(ViewGroup.java:1710)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1437)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.View.draw(View.java:6974)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.widget.FrameLayout.draw(FrameLayout.java:357)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1929)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.ViewRoot.draw(ViewRoot.java:1590)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.ViewRoot.performTraversals(ViewRoot.java:1290)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.view.ViewRoot.handleMessage(ViewRoot.java:1939)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.os.Looper.loop(Looper.java:143)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at android.app.ActivityThread.main(ActivityThread.java:4196)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at java.lang.reflect.Method.invokeNative(Native Method)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at java.lang.reflect.Method.invoke(Method.java:507)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-13 15:16:49.217: E/AndroidRuntime(21898):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-13 15:16:49.217: E/AndroidRuntime(21898):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 我已经添加了错误日志

标签: android multithreading progressdialog mapactivity


【解决方案1】:

run() non UI-Thread so you cant dismiss it in run 使用AsyncTaskHandler

在 AsyncTask ....

onpreExecute()= ProgressDialog dialog = new ProgressDialog(this);dialog.show(); 
inBackground(...)=put your run code here ..... 
onpostExecute =dialog.dismiss();

【讨论】:

  • 多亏了您在 AsyncTask 中放置代码位置的指导,才能使其正常工作
【解决方案2】:

删除这一行

dlg.dismiss();

从它现在所在的地方开始,并从它下面开始。

或如下所示

runOnUiThread(new Runnable() {
    public void run() {
        dlg.dismiss();
    }
});

最后,如果这也不起作用,那么最好使用异步任务,你可以参考这个LINK

【讨论】:

  • 这使得对话框根本不出现
  • 只删除 dlg.dismiss();并将其替换为“}.start();”下面这条线
  • 是的,它仍然崩溃了。将再次尝试异步任务
猜你喜欢
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多