Android 谷歌定位API的问题
我正在使用一个简单的代码,并不断获得 java.lang.NullPointerException:侦听器不能为null 我只使用一个非常简短的代码来尝试获取我的当前位置,但我无法让它工作。它可能必须处理Android 谷歌定位API的问题,android,Android,我正在使用一个简单的代码,并不断获得 java.lang.NullPointerException:侦听器不能为null 我只使用一个非常简短的代码来尝试获取我的当前位置,但我无法让它工作。它可能必须处理requestLocationUpdates回调中循环器位置的“null”。但我不确定。 我已经试了一整天了 以下是简短的代码: public class MainActivity extends AppCompatActivity { private FusedLocationProvider
requestLocationUpdates
回调中循环器位置的“null”。但我不确定。
我已经试了一整天了
以下是简短的代码:
public class MainActivity extends AppCompatActivity {
private FusedLocationProviderClient mFusedLocationClient;
private LocationCallback mLocationCallback;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
LocationRequest mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(10000);
mLocationRequest.setFastestInterval(5000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
//
} else {
mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback,
null /* Looper */);
}
mLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult == null) {
return;
}
for (Location location : locationResult.getLocations()) {
// Update UI with location data
TextView tv = (TextView) findViewById(R.id.tv);
Double latDouble = location.getLatitude();
String latString = latDouble.toString();
tv.setText(latString);
}
};
};
}
我只想知道现在的位置,为什么它会让我如此艰难?是什么导致了这个错误
谢谢您正在尝试在初始化mLocationCallback之前使用它。只需移动此代码:
mLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult == null) {
return;
}
for (Location location : locationResult.getLocations()) {
// Update UI with location data
TextView tv = (TextView) findViewById(R.id.tv);
Double latDouble = location.getLatitude();
String latString = latDouble.toString();
tv.setText(latString);
}
};
};
在此之前:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
//
} else {
mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback,
null /* Looper */);
}
循环器线程中的null与此无关。通过将其传递为null,您可以将回调保留在调用线程上。您试图在初始化之前使用mLocationCallback。只需移动此代码:
mLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult == null) {
return;
}
for (Location location : locationResult.getLocations()) {
// Update UI with location data
TextView tv = (TextView) findViewById(R.id.tv);
Double latDouble = location.getLatitude();
String latString = latDouble.toString();
tv.setText(latString);
}
};
};
在此之前:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
//
} else {
mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback,
null /* Looper */);
}
循环器线程中的null与此无关。通过将其传递为null,您可以将回调保留在调用线程上。请在问题上添加完整的logcat请在问题上添加完整的logcat谢谢,成功了!。顺便说一句,将其保留为空与键入
Looper.mylooper()
之间有什么区别?我很高兴它能工作。如果它不为null,则必须为其提供自己的自定义实现。例如在一个单独的线程上运行它。谢谢,它成功了!。顺便说一句,将其保留为空与键入Looper.mylooper()
之间有什么区别?我很高兴它能工作。如果它不为null,则必须为其提供自己的自定义实现。比如在一个单独的线程上运行它。