2012-04-13 4 views
0

Ich habe eine Klasse, die MapActivity erweitert.Zeige Dialog und aktualisiere mapview overlay

Ich habe Pins, die ich auf der Karte platzieren eine Funktion namens updateMap.The Stifte an Orten platziert werden, basierend auf einer Liste von Bushaltestellen, die in geladen werden.

Ich mag würde einen Laden Dialog während zeigen Das Array der Stopps wird heruntergeladen, aber ich bekomme Fehler mit meinem Code. Ich habe gerade den Dialog auftauchen und einen Thread laichen, um die Busrouten zu laden und die Karte zu aktualisieren.

Nach einigen Recherchen habe ich festgestellt, dass die UI-Ebene nicht von einem separaten Thread aktualisiert werden kann. Ich habe versucht Dinge zu bewegen, aber nichts scheint zu funktionieren.

Jede Hilfe dankbar!

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

Nach dem Ändern der Klasse, um AsyncTask zu verwenden, habe ich immer noch mein Programm abstürzen!

Dies ist der Logcat Fehler

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

können Sie Ihr Fehlerprotokoll einfügen –

+0

Ich habe das Fehlerprotokoll hinzugefügt –

Antwort

1

run() non UI-Thread so you cant dismiss it in run Verwenden AsyncTask oder Handler

in AsyncTask beziehen. ...

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

Konnte es funktioniert dank Ihrer Richtung mit wo Code in der AsyncTask platzieren –

1

diese Zeile entfernen

dlg.dismiss(); 

von dem Ort, wo es jetzt und Platz ist darunter starten.

oder unter

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

schließlich als machen, wenn dies wird nicht funktionieren auch dann gehen besser mit Asynchron-Aufgabe und Sie können diese LINK

+0

Das macht das Dialogfeld überhaupt nicht angezeigt –

+0

groß nur entfernen dlg.dismiss(); und ersetze es unter "} .start();" thiis Linie –

+0

ja, es ist immer noch abgestürzt. Gehen Sie erneut die Async-Aufgabe zu versuchen –

Verwandte Themen