Java 等待GPS修复对话框引发坏令牌异常-Android
我试图显示一个对话框,上面写着等待地图上的GPS定位。但它抛出了一个例外。谁能帮我更正一下密码吗。我不一定需要一个对话框。它可以是顶部的一个通知,它“保持打开”,并说等待gps定位……一旦定位得到,它就会消失。请帮我做这个Java 等待GPS修复对话框引发坏令牌异常-Android,java,android,google-maps,gps,progressdialog,Java,Android,Google Maps,Gps,Progressdialog,我试图显示一个对话框,上面写着等待地图上的GPS定位。但它抛出了一个例外。谁能帮我更正一下密码吗。我不一定需要一个对话框。它可以是顶部的一个通知,它“保持打开”,并说等待gps定位……一旦定位得到,它就会消失。请帮我做这个 package Firstdroid.Gps; import com.google.android.maps.*; import Firstdroid.Gps.R; import android.app.Dialog; import android.app.ProgressD
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
传递到
ProgressDialog
的上下文必须是活动
,而不是应用程序
改变
dialog = ProgressDialog.show(getApplicationContext(), "Please wait...","Retrieving GPS data ...", true);
致:
传递到
ProgressDialog
的上下文必须是活动
,而不是应用程序
改变
dialog = ProgressDialog.show(getApplicationContext(), "Please wait...","Retrieving GPS data ...", true);
致:
从这个错误看来,您在这里使用了错误的上下文
dialog = ProgressDialog.show(getApplicationContext(), "Please wait...","Retrieving GPS data ...", true);
所以,试着像这样使用它
dialog = ProgressDialog.show(MapViewer.this, "Please wait...","Retrieving GPS data ...", true);
从这个错误看来,您在这里使用了错误的上下文
dialog = ProgressDialog.show(getApplicationContext(), "Please wait...","Retrieving GPS data ...", true);
所以,试着像这样使用它
dialog = ProgressDialog.show(MapViewer.this, "Please wait...","Retrieving GPS data ...", true);
这就解决了!非常感谢你!我如何将其改为通知?您希望它是什么类型的通知?敬酒或状态栏通知?也请接受您问题的部分答案-我注意到您在上一个问题中试图从服务打开对话框。你有几个人,包括我在内,建议把它转移到一个活动中。这显然对你有用,所以你应该接受其中一个答案。有点像从顶部滑下来,说“正在修复”,然后在获得修复后消失!我不确定。我想你可能可以创建一个定位在屏幕外的文本视图,并将其向下和向后设置动画,但我以前没有做过类似的事情,我不知道这是否是最好的方法。另外,我同意山姆·奎斯特的观点,也许这应该是一个新问题?这就解决了它!非常感谢你!我如何将其改为通知?您希望它是什么类型的通知?敬酒或状态栏通知?也请接受您问题的部分答案-我注意到您在上一个问题中试图从服务打开对话框。你有几个人,包括我在内,建议把它转移到一个活动中。这显然对你有用,所以你应该接受其中一个答案。有点像从顶部滑下来,说“正在修复”,然后在获得修复后消失!我不确定。我想你可能可以创建一个定位在屏幕外的文本视图,并将其向下和向后设置动画,但我以前没有做过类似的事情,我不知道这是否是最好的方法。另外,我同意山姆·奎斯特的观点,也许这应该是一个新问题?如果这能解决它的话。将此标记为答案。问一个新问题,这是否解决了问题。将此标记为答案。问一个新问题