2012-04-13 3 views
0

MapActivity를 확장하는 클래스가 있습니다.대화 상자 표시 및지도 뷰 오버레이 업데이트

내가 핀에로드 버스 정류장의 목록을 기반으로 위치에 배치됩니다 updateMap.The라는 함수를 사용하여지도에 위치 핀을 가지고있다.

나는로드 대화 동안 보여 드리고자합니다

중지 배열이 다운로드되지만 코드에 오류가 발생합니다. 현재 대화 상자가 나타나고 버스 경로를로드하고지도를 업데이트하기 위해 스레드가 생성됩니다.

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를 사용하면 프로그램이 여전히 충돌합니다!

는 로그 캣 오류

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

를 참조 할 수 있습니다 경우는 마지막으로

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

아래합니다. ...

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

AsyncTask에 코드를 배치 할 위치와 함께 방향을 알려줌으로써 작업을 수행 할 수있었습니다. –

1

에게있는 것이 지금 장소가 시작 아래 장소에서이 라인

dlg.dismiss(); 

를 제거합니다.

또는이는 늘 더 나은 다음 작업을 비동기 작업으로 가서 AsyncTask를이 LINK

+0

을 추가 했으므로 대화 상자가 나타나지 않습니다. –

+0

위대한 경우에만 dlg.dismiss()를 제거하십시오. "} .start();"아래에 교체하십시오. " thiis line –

+0

예, 아직도 추락했습니다. 비동기 작업을 다시 시도하십시오 –