Android 位置上的空对象引用
Android Null object reference on location
好的,所以我正在使用来自 GPS.class 的这个 GPS 位置,并且我一直在获取空对象引用,但不确定 why.Here 是我的代码:
boolean permissionGranted = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
if(permissionGranted)
{
if (GPS.sharedInstance(AppDashboard.this).canGetLocation() && GPS.sharedInstance(this).isPermissionEnabled()) {
double lat = GPS.sharedInstance(AppDashboard.this).getLatitude();
double lon = GPS.sharedInstance(AppDashboard.this).getLongitude();
Log.e(TAG, "Location: " + lat + "/"+ lon);
}
else
{
Log.e(TAG, "Can't get GPS locations");
}
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 200);
}
我的清单:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-feature android:name="android.hardware.location.gps" />
我的Logcat:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference
at com.gpsApp.utility.GPS.getLatitude(GPS.java:113)
和GPS Class 113
public double getLatitude() {
if (_locationManager != null) {
_latitude = _location.getLatitude();
}
return _latitude;
}
使用这一行
boolean permissionGranted = ActivityCompat.checkSelfPermission(getApplicationContext, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
而不是这个
boolean permissionGranted = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
您正在从 GPS
class 调用 public double getLatitude()
,但是 _location
变量未初始化,因此您得到 NullPointerException。
在呼叫 getLatitude()
之前,请尝试从您的 GPS
class 呼叫 public Location getLastKnownLocation()
。此调用将初始化 _location
变量。
好的,所以我正在使用来自 GPS.class 的这个 GPS 位置,并且我一直在获取空对象引用,但不确定 why.Here 是我的代码:
boolean permissionGranted = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
if(permissionGranted)
{
if (GPS.sharedInstance(AppDashboard.this).canGetLocation() && GPS.sharedInstance(this).isPermissionEnabled()) {
double lat = GPS.sharedInstance(AppDashboard.this).getLatitude();
double lon = GPS.sharedInstance(AppDashboard.this).getLongitude();
Log.e(TAG, "Location: " + lat + "/"+ lon);
}
else
{
Log.e(TAG, "Can't get GPS locations");
}
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 200);
}
我的清单:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-feature android:name="android.hardware.location.gps" />
我的Logcat:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference
at com.gpsApp.utility.GPS.getLatitude(GPS.java:113)
和GPS Class 113
public double getLatitude() {
if (_locationManager != null) {
_latitude = _location.getLatitude();
}
return _latitude;
}
使用这一行
boolean permissionGranted = ActivityCompat.checkSelfPermission(getApplicationContext, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
而不是这个
boolean permissionGranted = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
您正在从 GPS
class 调用 public double getLatitude()
,但是 _location
变量未初始化,因此您得到 NullPointerException。
在呼叫 getLatitude()
之前,请尝试从您的 GPS
class 呼叫 public Location getLastKnownLocation()
。此调用将初始化 _location
变量。