Autore Topic: Problema Dialog Ontap On location changed  (Letto 615 volte)

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Problema Dialog Ontap On location changed
« il: 20 Maggio 2012, 16:42:12 CEST »
0
Mi scuso se è la sezione sbagliata, ma essendo l'errore generato all'apertura della dialog, ho postato qui.
Ho un certo codice, nel quale ho inserito l'evento al click sul geopoint. Questo click genera una dialog con delle informazioni (codice prelevato qui dal forum)
Ora al location changed devo modificare anche queste informazioni, quindi volevo creare un nuovo geopoint che mostra la mia nuova posizione, e al click naturalmente mi restuisce sempre la dialog, solo che dentro al locationChanged non posso mettere "this" quindi ho messo sia "getBasedContext()" che "getApplicationContext()" ma entrambi mi generano l'errore.
Vi mostro il codice e penso ceh sarà più chiaro:

Nel on create:
Codice (Java): [Seleziona]
Drawable drawable = this.getResources().getDrawable(R.drawable.marker);
                        List<Overlay> overlays = map.getOverlays();
                        AItemizedOverlay itemizedoverlay = new AItemizedOverlay(drawable, this);
                        //setto il geo point con tutti i metodi e le opzioni
                       
                        OverlayItem overlayitem = new OverlayItem(point, "Tua posizione", "Ultima tua posizione registrata alle : ");
                        itemizedoverlay.addOverlay(overlayitem);
                        overlays.add(itemizedoverlay);

e questo nel location changedd

Codice (Java): [Seleziona]
Drawable drawable = getApplicationContext().getResources().getDrawable(R.drawable.marker);
                        List<Overlay> overlays = map.getOverlays();
                        AItemizedOverlay itemizedoverlay = new AItemizedOverlay(drawable, getApplicationContext());
                        //setto il geo point con tutti i metodi e le opzioni

                        OverlayItem overlayitem = new OverlayItem(point, "Tua posizione", "Ultima tua posizione registrata");
                        itemizedoverlay.addOverlay(overlayitem);
                        overlays.add(itemizedoverlay);
                        controller.setCenter(point);
                        controller.animateTo(point);

naturalmente "tua posizione" e "ultima tua posizione registrata" poi saranno modificati.
Idee del perchè va in crash?

naturalmente posto il logcat


05-20 14:29:13.049: E/AndroidRuntime(673): FATAL EXCEPTION: main
05-20 14:29:13.049: E/AndroidRuntime(673): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
05-20 14:29:13.049: E/AndroidRuntime(673):    at android.view.ViewRoot.setView(ViewRoot.java:531)
05-20 14:29:13.049: E/AndroidRuntime(673):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
05-20 14:29:13.049: E/AndroidRuntime(673):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
05-20 14:29:13.049: E/AndroidRuntime(673):    at android.app.Dialog.show(Dialog.java:241)
05-20 14:29:13.049: E/AndroidRuntime(673):    at android.app.AlertDialog$Builder.show(AlertDialog.java:802)
05-20 14:29:13.049: E/AndroidRuntime(673):    at Team.map.two.trasmetti$AItemizedOverlay.onTap(trasmetti.java:250)
05-20 14:29:13.049: E/AndroidRuntime(673):    at com.google.android.maps.ItemizedOverlay.onTap(ItemizedOverlay.java:453)
05-20 14:29:13.049: E/AndroidRuntime(673):    at com.google.android.maps.OverlayBundle.onTap(OverlayBundle.java:83)
05-20 14:29:13.049: E/AndroidRuntime(673):    at com.google.android.maps.MapView$1.onSingleTapUp(MapView.java:356)
05-20 14:29:13.049: E/AndroidRuntime(673):    at com.google.android.maps.GestureDetector.onTouchEvent(GestureDetector.java:533)
05-20 14:29:13.049: E/AndroidRuntime(673):    at com.google.android.maps.MapView.onTouchEvent(MapView.java:683)
05-20 14:29:13.049: E/AndroidRuntime(673):    at android.view.View.dispatchTouchEvent(View.java:3885)
05-20 14:29:13.049: E/AndroidRuntime(673):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:903)
05-20 14:29:13.049: E/AndroidRuntime(673):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942)
05-20 14:29:13.049: E/AndroidRuntime(673):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942)
05-20 14:29:13.049: E/AndroidRuntime(673):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942)
05-20 14:29:13.049: E/AndroidRuntime(673):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942)
05-20 14:29:13.049: E/AndroidRuntime(673):    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1691)
05-20 14:29:13.049: E/AndroidRuntime(673):    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1125)
05-20 14:29:13.049: E/AndroidRuntime(673):    at android.app.Activity.dispatchTouchEvent(Activity.java:2096)
05-20 14:29:13.049: E/AndroidRuntime(673):    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1675)
05-20 14:29:13.049: E/AndroidRuntime(673):    at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2194)
05-20 14:29:13.049: E/AndroidRuntime(673):    at android.view.ViewRoot.handleMessage(ViewRoot.java:1878)
05-20 14:29:13.049: E/AndroidRuntime(673):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-20 14:29:13.049: E/AndroidRuntime(673):    at android.os.Looper.loop(Looper.java:130)
05-20 14:29:13.049: E/AndroidRuntime(673):    at android.app.ActivityThread.main(ActivityThread.java:3683)
05-20 14:29:13.049: E/AndroidRuntime(673):    at java.lang.reflect.Method.invokeNative(Native Method)
05-20 14:29:13.049: E/AndroidRuntime(673):    at java.lang.reflect.Method.invoke(Method.java:507)
05-20 14:29:13.049: E/AndroidRuntime(673):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-20 14:29:13.049: E/AndroidRuntime(673):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-20 14:29:13.049: E/AndroidRuntime(673):    at dalvik.system.NativeStart.main(Native Method)



P.s. mi sono reso conto che così facendo, creo sempre nuovi geopoint sulla mappa, ogni volta che mi sposto, lasciandomi così dietro una scia di geopoint, e non è quello che voglio. provo a modificare ilcodice nel frattempo
« Ultima modifica: 20 Maggio 2012, 16:45:27 CEST da gabric »

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Problema Dialog Ontap On location changed
« Risposta #1 il: 20 Maggio 2012, 17:58:51 CEST »
0
Uhm ho risolto impostando
Codice (Java): [Seleziona]
 int LAT = 0;
    int LNG = 0;
    GeoPoint point = new GeoPoint(LAT, LNG);
    OverlayItem overlayitem = new OverlayItem(point, nome, "Posizione non ancora trasmessa");
   
    AItemizedOverlay itemizedoverlay;
   
    List<Overlay> overlays;

direttamente in cima alla classe (quindi non dichiarandole dentro ai metodi, ma a monte)
inoltre per risolvere il problema dei vecchi geopoint che restavano sulla mappa, ho inserito

itemizedoverlay.clear();

subito prima di inserire il nuovo overlay