2011-08-04 1 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; 
    } 
} 

エラーログ:あなたがProgressDialogに渡す

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

コンテキストが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

関連する問題