基本上,我不知道这是Eclipse的问题还是手机的GPS或我应用的代码。
问题:当我尝试重新启动手机并运行我的应用时,它会在运行时崩溃。错误是NullPointer(未提供行号)。但是,如果我从onCreate()中删除两行来检查GPS,然后再次运行应用程序,它就能正常工作。然后,如果我再次重新添加这些行,该应用程序工作。所以基本上,代码很好,但是如果在重新启动手机后第一次运行应用程序,它会崩溃。以下是一些相关代码:
修改
好的,这就是我所做的:
if (new LocTools(this).checkGPS() == true) { // new method, checks if Gps is active and returns boolean.
LatLng ll = new LocTools(this).getMyLocation();
if (ll != null) {
Toast.makeText(this, "LatLng: "+ll, Toast.LENGTH_SHORT).show();
// ll is NOT null
//LocTools.goToLocation(map,ll,5,true);
} else {
Toast.makeText(this, "Gps error", Toast.LENGTH_SHORT).show();
}
}
我注释掉LocTools.goToLocation行并插入Toast以查看LatLng是否为null。结果:不是。然后我取消注释了LocTools.goToLocation,所以代码看起来像这样:
...
if (ll != null) {
Toast.makeText(this, "LatLng: "+ll, Toast.LENGTH_SHORT).show();
LocTools.goToLocation(map,ll,5,true);
}
...
然后运行应用程序,它在运行时崩溃了 - NullPointer!我不明白为什么这样做。没有NullPointer ......
答案 0 :(得分:0)
返回默认位置而不是null。
public LatLng getMyLocation() {
final LocationManager manager = (LocationManager) mContext.getSystemService( Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
final AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle("GPS");
builder.setIcon(R.drawable.gps);
builder.setMessage("Please enable GPS satellites then try again")
.setCancelable(false)
.setPositiveButton("GPS settings", new DialogInterface.OnClickListener() {
public void onClick(final DialogInterface dialog, final int id) {
mContext.startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(final DialogInterface dialog, final int id) {
dialog.cancel();
}
});
final AlertDialog alert = builder.create();
alert.show();
return new LatLng(mock_lat,mock_lng);
} else {
LocationManager lm = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
Location l = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
double lat = l.getLatitude();
double lng = l.getLongitude();
return new LatLng(lat,lng);
}
}
OR
if (new LocTools(this).getMyLocation()!=null) {
LatLng ll = new LocTools(this).getMyLocation();
LocTools.goToLocation(map,ll,3,true);
}
答案 1 :(得分:0)
问题:LatLng不是NULL。尝试将地图相机移动到LatLng位置时。正在收到NullPointerException。这似乎很奇怪,因为没有合理的解释:
解决:我从onCreate()执行了AsyncTask。要解决NullPointerExeception,我必须包含moveCamera命令(在我的情况下,我的自定义LocTools.goToLocation()方法)必须在Runnable中。像这样:
if (new LocTools(this).checkGPS() == true) {
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
public void run() {
LocTools.goToLocation(map, new LocTools(getBaseContext()).getMyLocation(),5,true);
}
});
}
希望这有助于某人。