gpt4 book ai didi

android - 即使在定义 @NonNull 之后,mLastKnownLocation 也是空的

转载 作者:行者123 更新时间:2023-11-29 19:00:30 25 4
gpt4 key购买 nike

我正在尝试从这段代码中获取设备位置

private void getDeviceLocation() {
/*
* Get the best and most recent location of the device, which may be null in rare
* cases when a location is not available.
*/
try {
if (mLocationPermissionGranted) {
Task<Location> locationResult = mFusedLocationProviderClient.getLastLocation();
locationResult.addOnCompleteListener(getActivity(), new OnCompleteListener<Location>() {
@Override
public void onComplete(@NonNull Task<Location> task) {
if (task.isSuccessful()) {
mMap.clear();
// Set the map's camera position to the current location of the device.
mLastKnownLocation = task.getResult();
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
new LatLng(mLastKnownLocation.getLatitude(),
mLastKnownLocation.getLongitude()), DEFAULT_ZOOM));


} else {
Log.d(TAG, "Current location is null. Using defaults.");
Log.e(TAG, "Exception: %s", task.getException());
mMap.moveCamera(CameraUpdateFactory
.newLatLngZoom(mDefaultLocation, DEFAULT_ZOOM));
mMap.getUiSettings().setMyLocationButtonEnabled(false);
}
}
});

通常工作正常,但有时会抛出错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference
at SecondFragment$1.onComplete(SecondFragment.java:230)

代码的第230行是:

      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
new LatLng(mLastKnownLocation.getLatitude(), //Line230
mLastKnownLocation.getLongitude()), DEFAULT_ZOOM));

即使在使用@NonNull 屏蔽之后,我也不明白代码是如何到这里并给出空点异常的。

此外,此问题仅在模拟器中出现。在真实设备中,我没有发现这个错误(即应用程序没有像在模拟器中那样崩溃)

最佳答案

NonNull 表示返回的值不为空。这并不意味着其上的函数返回值(如 getResult())不能为 null。

此外,getLastKnownLocation 可以始终返回 null,无论您如何包装它。如果您想确保获得位置,请使用 getSingleUpdate 并等待回调。

关于android - 即使在定义 @NonNull 之后,mLastKnownLocation 也是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49188545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com