2012-04-13 1 views
0

У меня есть класс, который расширяет MapActivity.Отображение диалога и обновление наложения карты зрения

У меня есть контакты, которые я размещаю на карте, используя функцию под названием updateMap.The штифты расположены в местах, на основе списка автобусных остановок, которые загружаются в.

Я хотел бы показать диалоговое загрузка время массив остановок загружается, но я получаю ошибки с моим кодом. В настоящее время у меня появилось диалоговое окно, и поток нерест загружает маршруты автобусов и обновляет карту.

После некоторых исследований я понял, что слой пользовательского интерфейса не может быть обновлен из отдельного потока. Я пробовал перемещаться, но ничего не работает.

Любая помощь оценена!

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) 
+0

вы можете вставить свой журнал ошибок –

+0

Я добавил журнал ошибок –

ответ

1

run() non UI-Thread so you cant dismiss it in run Использование AsyncTask или Handler

в AsyncTask. ...

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

Удалось заставить его работать благодаря вашему указанию, где разместить код в AsyncTask –

1

удалить эту строку

dlg.dismiss(); 

от того места, где он сейчас находится и место под ней начать.

или сделать его, как показано ниже

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

Наконец, если это также не будет работать, то лучше идти с асинхронной задачи, и вы можете передать этот LINK

+0

Это делает диалог вообще не отображаться –

+0

great only remove dlg.dismiss(); и замените его ниже "} .start();" thiis line –

+0

Да, он все еще разбился. Перейти к повторной попытке задачи Async –

 Смежные вопросы

  • Нет связанных вопросов^_^