2011-08-04 2 views
0

지도에서 GPS 수정을 기다리는 대화 상자를 표시하려고합니다. 그러나 BadTokenException을 던집니다. 어떤 사람이 제 코드를 수정하십시오. 반드시 대화 상자가 필요하지는 않습니다. 그것은 '위에 머물러 라'고 GPS가 고침을 기다리는 것을 말하는 통보가 될 수 있으며 일단 고쳐가되면 사라질 수 있습니다. 친절하게 도와주세요!GPS 수정 대기 중 대화 상자에서 잘못된 토큰 예외가 발생합니다. - Android

package Firstdroid.Gps; 
import com.google.android.maps.*; 
import Firstdroid.Gps.R; 
import android.app.Dialog; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.location.Location; 
import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapActivity; 
import com.google.android.maps.MapController; 
import com.google.android.maps.MapView; 
public class MapViewer extends MapActivity { 

    MyLocationOverlay myLocOverlay; 
    Location loc; 
    Dialog dialog; 
    private MapController mapController; 
    private MapView mapView; 
    private LocationManager locationManager; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle bundle) 
    { 
     super.onCreate(bundle); 
     setContentView(R.layout.map); 
     initMyLocation(); 
     mapView = (MapView) findViewById(R.id.mymap); 
     mapView.setBuiltInZoomControls(true); 
     mapView.setStreetView(true); 
     mapController = mapView.getController(); 
     mapController.setZoom(19); 
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 
       0, new GeoUpdateHandler()); 

    } 
    /** 
    * Initialises the MyLocationOverlay and adds it to the overlays of the map 
    */ 
    private void initMyLocation() { 
     //Runnable to determine when the first GPS fix was received. 
     Runnable showWaitDialog = new Runnable() { 
      @Override 
      public void run() { 
      while (loc == null) { 
      // Wait for first GPS Fix (do nothing until loc != null) 
      } 
      // After receiving first GPS Fix dismiss the Progress Dialog 
      dialog.dismiss(); 
      } 
      }; 
      // Create a Dialog to let the User know that we're waiting for a GPS Fix 
      dialog = ProgressDialog.show(getApplicationContext(), "Please wait...","Retrieving GPS data ...", true); 
      Thread t = new Thread(showWaitDialog); 
      t.start(); 
      while(loc !=null) 
      { 
      myLocOverlay = new MyLocationOverlay(this, mapView); 
      myLocOverlay.enableMyLocation(); 
      mapView.getOverlays().add(myLocOverlay); 
      //MapController mapController = mapView.getController(); 
      } 
    } 
    public class GeoUpdateHandler implements LocationListener { 

     @Override 
     public void onLocationChanged(Location location) { 
      int lat = (int) (location.getLatitude() * 1E6); 
      int lng = (int) (location.getLongitude() * 1E6); 
      GeoPoint point = new GeoPoint(lat, lng); 
      mapController.animateTo(point); // mapController.setCenter(point); 
     } 

     @Override 
     public void onProviderDisabled(String provider) { 
     } 

     @Override 
     public void onProviderEnabled(String provider) { 
     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
     } 
    } 

    @Override 
    protected boolean isRouteDisplayed() { 
     return false; 
    } 
} 

오류 로그 :

08-04 06:29:23.794: WARN/dalvikvm(8896): threadid=1: thread exiting with uncaught exception (group=0x400259f8) 
08-04 06:29:23.794: WARN/WindowManager(96): Attempted to add window with non-application token WindowToken{463f4b78 token=null}. Aborting. 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896): FATAL EXCEPTION: main 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896): java.lang.RuntimeException: Unable to start activity ComponentInfo{Firstdroid.Gps/Firstdroid.Gps.MapViewer}: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2787) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2803) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at android.app.ActivityThread.access$2300(ActivityThread.java:135) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at android.os.Looper.loop(Looper.java:144) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at android.app.ActivityThread.main(ActivityThread.java:4937) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at java.lang.reflect.Method.invoke(Method.java:521) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at dalvik.system.NativeStart.main(Native Method) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at android.view.ViewRoot.setView(ViewRoot.java:513) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at android.app.Dialog.show(Dialog.java:241) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at android.app.ProgressDialog.show(ProgressDialog.java:107) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at android.app.ProgressDialog.show(ProgressDialog.java:90) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at Firstdroid.Gps.MapViewer.initMyLocation(MapViewer.java:64) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at Firstdroid.Gps.MapViewer.onCreate(MapViewer.java:37) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1069) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2751) 
08-04 06:29:23.804: ERROR/AndroidRuntime(8896):  ... 11 more 
08-04 06:29:23.814: WARN/ActivityManager(96): Force finishing activity Firstdroid.Gps/.MapViewer 

답변

4

당신이 ProgressDialog에 전달하는 컨텍스트는 Activity 아닌 Application해야합니다.

변경에

dialog = ProgressDialog.show(getApplicationContext(), "Please wait...","Retrieving GPS data ...", true); 

: 오류에서

dialog = ProgressDialog.show(this, "Please wait...","Retrieving GPS data ...", true); 
+0

처럼 사용하려고! 대단히 감사합니다! 대신 알림으로 설정하려면 어떻게해야합니까? – adam

+0

어떤 종류의 알림을 받고 싶습니까? 축배 또는 상태 표시 줄 알림? – Pikaling

+0

또한 질문에 대한 답변 중 일부를 수락하십시오 - 이전 질문에서 서비스에서 대화 상자를 여는 중 메모가 나타납니다. 저도 포함되어있는 여러 사람들을 활동으로 옮길 것을 권장했습니다. 이것은 분명히 당신을 위해 일 했으므로 답 중 하나를 받아 들여야합니다. – Pikaling

1

당신이 여기에 잘못된 컨텍스트를 사용하는 것으로 보인다.

dialog = ProgressDialog.show(getApplicationContext(), "Please wait...","Retrieving GPS data ...", true); 

그래서 그것을 해결이

dialog = ProgressDialog.show(MapViewer.this, "Please wait...","Retrieving GPS data ...", true); 
+0

이렇게 해결되었습니다! 대신 알림으로 어떻게 만들 수 있습니까? 이 문제가 해결되면 – adam

+0

이것을 답으로 표시하십시오. 새로운 질문하기 – Samuel

관련 문제