Android谷歌地图V2当前位置纬度经度NullPointerException [英] Android Google Maps V2 current position latitude longitude NullPointerException
问题描述
setUpMap方法是:
private void setUpMap(){
BitmapDescriptor iconm = BitmapDescriptorFactory.fromResource( R.drawable.m);
BitmapDescriptor iconc = BitmapDescriptorFactory.fromResource(R.drawable.c);
//启用Google Map的MyLocation图层
mMap.setMyLocationEnabled(true);
//从系统服务LOCATION_SERVICE获取LocationManager对象
LocationManager locationManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE);
//创建一个标准对象来检索提供者
Criteria criteria = new Criteria();
//获取最佳提供者的名称
字符串提供者;
provider = locationManager.getBestProvider(criteria,true);
//获取当前位置
位置myLocation = locationManager.getLastKnownLocation(provider);
//获取GPS状态
boolean isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
//获取网络状态
boolean isNWEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if(!isNWEnabled)
{
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setMessage(getString(R.string.askposition));
dialog.setPositiveButton(getString(R.string.settings),new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface paramDialogInterface,int paramInt){
/ / TODO自动生成的方法存根
startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS),100);
}
});
dialog.setNegativeButton(Cancel,new DialogInterface.OnClickListener(){
@Override $ b $ public void onClick(DialogInterface paramDialogInterface,int paramInt){
// TODO自动生成方法存根
}
});
dialog.show();
//未启用网络提供商
Log.e(当前位置,当前经纬度为空);
}
else
{
//如果启用GPS,则使用GPS服务获取经纬度
if(isGPSEnabled){
if(myLocation == null ){
if(locationManager!= null){
myLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
double latitude = myLocation.getLatitude();
double longitude = myLocation.getLongitude();
LatLng latlng =新LatLng(纬度,经度);
// myLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
// double latitude = myLocation.getLatitude();
// double longitude = myLocation.getLongitude();
// String lati = String.valueOf(latitude);
// String longi = String.valueOf(longitude);
//为当前位置创建一个LatLng对象
// LatLng latlng = new LatLng(latitude,longitude);
//设置地图类型
//mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
// CameraPosition cameraPosition = new CameraPosition.Builder()。target(latlng).zoom(12).build();
//mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
//在Google Map中显示当前位置
// mMap.moveCamera(newLatLng(latlng));
//放大Google Map
//mMap.animateCamera(CameraUpdateFactory.zoomTo(12));
$ b else {
//首先从网络供应商处获得位置
if(isNWEnabled){
if(myLocation = = null){
if(locationManager!= null){
myLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
double latitude = myLocation.getLatitude();
double longitude = myLocation.getLongitude();
LatLng latlng =新LatLng(纬度,经度);
// double latitude = myLocation.getLatitude();
// double longitude = myLocation.getLongitude();
//为当前位置创建一个LatLng对象
// LatLng latlng = new LatLng(latitude,longitude);
//设置地图类型
//mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
//放大Google Map
// CameraPosition cameraPosition = new CameraPosition.Builder()。target(latlng).zoom(12).build();
//mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
//mMap.animateCamera(CameraUpdateFactory.zoomTo(12));
//在Google Map中显示当前位置
//mMap.moveCamera(newLatLng(latlng));
}
}
}}
}
double latitude = myLocation.getLatitude();
double longitude = myLocation.getLongitude();
LatLng latlng =新LatLng(纬度,经度);
CameraPosition cameraPosition = new CameraPosition.Builder()。target(latlng).zoom(11).build();
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
当我第一次从Android Studio运行应用程序到我的设备时,它工作正常,如果我关闭并重新启动应用程序。
但是当我重启我的智能手机时,它给了我NullPointerException @ double latitude = myLocation.getLatitude();
,从那一刻起它总是崩溃。
我该如何修复它?
评论的代码行几乎没有尝试。同样的问题。
任何帮助将不胜感激。
在此先感谢。
我认为针对您的问题的解决方法是使用 PASSIVE_PROVIDER 。
示例代码:
LocationManager locationManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,2000,10,locationListener);
myLocation = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
double longitude = myLocation.getLongitude();
double latitude = myLocation.getLatitude();
private final LocationListener locationListener = new LocationListener(){
public void onLocationChanged(Location location){
longitude = location.getLongitude();
latitude = location.getLatitude();
}
}
There are a lot of similar question but I don't find any solution for my problem. The setUpMap method is:
private void setUpMap() {
BitmapDescriptor iconm = BitmapDescriptorFactory.fromResource(R.drawable.m);
BitmapDescriptor iconc = BitmapDescriptorFactory.fromResource(R.drawable.c);
// Enable MyLocation Layer of Google Map
mMap.setMyLocationEnabled(true);
// Get LocationManager object from System Service LOCATION_SERVICE
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
// Create a criteria object to retrieve provider
Criteria criteria = new Criteria();
// Get the name of the best provider
String provider;
provider = locationManager.getBestProvider(criteria,true);
// Get Current Location
Location myLocation = locationManager.getLastKnownLocation(provider);
// getting GPS status
boolean isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
// getting network status
boolean isNWEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isNWEnabled)
{
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setMessage(getString(R.string.askposition) );
dialog.setPositiveButton(getString(R.string.settings), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface paramDialogInterface, int paramInt) {
// TODO Auto-generated method stub
startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS), 100);
}
});
dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface paramDialogInterface, int paramInt) {
// TODO Auto-generated method stub
}
});
dialog.show();
// no network provider is enabled
Log.e("Current Location", "Current Lat Lng is Null");
}
else
{
// if GPS Enabled get lat/long using GPS Services
if (isGPSEnabled){
if (myLocation == null) {
if (locationManager != null) {
myLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
double latitude = myLocation.getLatitude();
double longitude = myLocation.getLongitude();
LatLng latlng = new LatLng(latitude, longitude);
//myLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
//double latitude = myLocation.getLatitude();
//double longitude = myLocation.getLongitude();
//String lati = String.valueOf(latitude);
//String longi = String.valueOf(longitude);
// Create a LatLng object for the current location
//LatLng latlng = new LatLng(latitude, longitude);
// set map type
//mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
//CameraPosition cameraPosition = new CameraPosition.Builder().target(latlng).zoom(12).build();
//mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
// Show the current location in Google Map
// mMap.moveCamera(newLatLng(latlng));
// Zoom in the Google Map
//mMap.animateCamera(CameraUpdateFactory.zoomTo(12));
}
}
}
else {
// First get location from Network Provider
if (isNWEnabled) {
if (myLocation == null) {
if (locationManager != null) {
myLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
double latitude = myLocation.getLatitude();
double longitude = myLocation.getLongitude();
LatLng latlng = new LatLng(latitude, longitude);
//double latitude = myLocation.getLatitude();
//double longitude = myLocation.getLongitude();
// Create a LatLng object for the current location
//LatLng latlng = new LatLng(latitude, longitude);
// set map type
//mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
// Zoom in the Google Map
//CameraPosition cameraPosition = new CameraPosition.Builder().target(latlng).zoom(12).build();
//mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
//mMap.animateCamera(CameraUpdateFactory.zoomTo(12));
// Show the current location in Google Map
//mMap.moveCamera(newLatLng(latlng));
}
}
}}
}
double latitude = myLocation.getLatitude();
double longitude = myLocation.getLongitude();
LatLng latlng = new LatLng(latitude, longitude);
CameraPosition cameraPosition = new CameraPosition.Builder().target(latlng).zoom(11).build();
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
It works fine when I first Run the app from Android Studio to my device, also works fine if I close and restart the application.
But when I reboot my smartphone it gives me NullPointerException @ double latitude = myLocation.getLatitude();
and from that moment it crash always.
How could I fix it?
The commented code lines are about few attempts. Same problem at all.
Any help would be much appreciated.
Thanks in advance.
I think a workaround for your problem is to use PASSIVE_PROVIDER.
Sample code:
LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, locationListener);
myLocation = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
double longitude = myLocation.getLongitude();
double latitude = myLocation.getLatitude();
private final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
longitude = location.getLongitude();
latitude = location.getLatitude();
}
}
这篇关于Android谷歌地图V2当前位置纬度经度NullPointerException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!