Android 2.1 GoogleMaps IthemeszedOverlay ConcurrentModificationException

Non riesco a capire l'origine della ConcurrentModificationException . Nella mia activity sto chiamando updateMapOverlay() . updateMapOverlay() anche updateMapOverlay() all'interno di un'altra discussione ( TimerTask ) che viene richiamata ad intervalli regolari. Prendo i blocchi appropriati quando invoca updateMapOverlay() da entrambi i thread. Questo problema viene causato perché updateMapOverlay da un thread non interface utente (ad esempio, TimerTask ). Qualcun altro ha affrontato una questione simile?

private void updateMapOverlay() {

  • Passaggio di un cursore ad un'attività?
  • Cambiare il colore di un button di scelta rapida
  • Sfondi compiti frammenti e "Imansible eseguire questa azione dopo onSaveInstanceState"
  • Come get il riferimento di attr nel codice?
  • Imansible eseguire il progetto Eclipse - Imansible trovare il database API
  • Android CardView con un colore ombreggiato personalizzato
  •   this.ithemeszedOverlay.refreshItems(createOverlayItemsList()); List<Overlay> overlays = mapView.getOverlays(); overlays.clear(); overlays.add(cotIthemeszedOverlay); this.mapview.invalidate(); } 

    Grazie.

    Eccezione :

     W/dalvikvm(10641): threadid=3: thread exiting with uncaught exception (group=0x4001b180) E/AndroidRuntime(10641): Uncaught handler: thread main exiting due to uncaught exception E/AndroidRuntime(10641): java.util.ConcurrentModificationException E/AndroidRuntime(10641): at java.util.AbstractList$SimpleListIterator.next(AbstractList.java:64) E/AndroidRuntime(10641): at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:41) E/AndroidRuntime(10641): at com.google.android.maps.MapView.onDraw(MapView.java:494) E/AndroidRuntime(10641): at android.view.View.draw(View.java:6535) E/AndroidRuntime(10641): at android.view.ViewGroup.drawChild(ViewGroup.java:1531) E/AndroidRuntime(10641): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258) E/AndroidRuntime(10641): at android.view.ViewGroup.drawChild(ViewGroup.java:1529) E/AndroidRuntime(10641): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258) E/AndroidRuntime(10641): at android.view.View.draw(View.java:6538) E/AndroidRuntime(10641): at android.widget.FrameLayout.draw(FrameLayout.java:352) E/AndroidRuntime(10641): at android.view.ViewGroup.drawChild(ViewGroup.java:1531) E/AndroidRuntime(10641): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258) E/AndroidRuntime(10641): at android.view.ViewGroup.drawChild(ViewGroup.java:1529) E/AndroidRuntime(10641): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258) E/AndroidRuntime(10641): at android.view.View.draw(View.java:6538) E/AndroidRuntime(10641): at android.widget.FrameLayout.draw(FrameLayout.java:352) E/AndroidRuntime(10641): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1830) E/AndroidRuntime(10641): at android.view.ViewRoot.draw(ViewRoot.java:1349) E/AndroidRuntime(10641): at android.view.ViewRoot.performTraversals(ViewRoot.java:1114) E/AndroidRuntime(10641): at android.view.ViewRoot.handleMessage(ViewRoot.java:1633) E/AndroidRuntime(10641): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(10641): at android.os.Looper.loop(Looper.java:123) E/AndroidRuntime(10641): at android.app.ActivityThread.main(ActivityThread.java:4363) E/AndroidRuntime(10641): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(10641): at java.lang.reflect.Method.invoke(Method.java:521) E/AndroidRuntime(10641): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) E/AndroidRuntime(10641): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) E/AndroidRuntime(10641): at dalvik.system.NativeStart.main(Native Method) I/Process ( 95): Sending signal. PID: 10641 SIG: 3 

  • Errore di class non trovato, ma la class esiste definitivamente
  • screen.width e screen.height diversi valori in diverse API / dispositivi
  • come implementare TimeChart in achartengine con android
  • Android Studio: Qual è il modo giusto per cambiare targetSdkVersion?
  • Problemi quando si scala un'image YUV usando la libreria libyuv
  • SharedPreferences ripristinate dopo la chiusura della forza
  • 4 Solutions collect form web for “Android 2.1 GoogleMaps IthemeszedOverlay ConcurrentModificationException”

    Questo problema viene causato perché invoco updateMapOverlay da un thread non interface utente

    Sì.

    Chiamerò anche updateMapOverlay () all'interno di un'altra discussione (TimerTask) che viene richiamata ad intervalli regolari.

    Perché rimuovi e aggiunge costantemente un sovrapposto? Basta aggiornare l'overlay e invalidare. Vedere qui per un esempio di aggiornamento di una sovrapposizione in modo asincrono.

    Grazie per la vostra risposta.

    Tuttavia, nel codice non stai facendo qualcosa di simile ( map.getOverlays().remove(sites); e map.getOverlays().add(sites); )?

    class OverlayTask extends AsyncTask { @Override public void onPreExecute() { if (sites!=null) { map.getOverlays().remove(sites); map.invalidate(); sites=null; } }

      @Override public Void doInBackground(Void... unused) { SystemClock.sleep(5000); // simulated work sites=new SitesOverlay(); return(null); 

    }

      @Override
     public void onPostExecute (Void inutilizzato) {
       . Map.getOverlays () aggiungere (siti);
       map.invalidate ();
      }
     }
    

    In linea di massima, si dovrebbe essere sicuri finché si modifica solo la list / mappa di backup di IthemeszedOverlay sul thread UI.

    Come ha sottolineato Mark, AsyncTask:

     @Override protected void onPostExecute(Cursor cursor) { // modify List/Map populate(); mapView.invalidate(); } 

    viene sempre eseguito sul thread UI, quindi le modifiche sono sicure.

    Ho lo stesso problema. Per rispondere alla tua domanda su "perché stai eliminando e aggiungendo un overlay costantemente?", Lo faccio perché alcuni dei miei elementi di overlay potrebbero non esistere o potrebbero apparire nuovi e quelli esistenti potrebbero cambiare posizione, a seconda cosa sta succedendo nel resto della mia particolare applicazione. Inoltre, non ho trovato alcun modo per cambiare la posizione di un OverlayItem senza estenderlo in modo che possa farlo.

    Inoltre, non cambierebbe quali elementi sono nel overlay specificato causare anche un'exception di modifica concorrente?

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.