【发布时间】:2018-05-06 15:20:36
【问题描述】:
Ciao!我有一个需要当前位置的 Activity,以便用户可以看到哪些对象靠近他。
好吧,我要为 GoogleApiClient、FusedLocation、回调等而疯狂,我得到的唯一结果是 getLastLocation 返回 null。
我的 Activity 实现了 GoogleApiClient.ConnectionCallbacks 和 GoogleApiClient.OnConnectionFailedListener。
在OnCreate 中我调用getLocation() 是这样的:
private void getLocation(){
locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(60*1000);
locationRequest.setFastestInterval(10*1000);
mFusedLocationApi = LocationServices.FusedLocationApi;
gApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
if (gApiClient != null) {
gApiClient.connect();
}
}
我也有这个:
@Override
protected void onStart() {
super.onStart();
if (gApiClient != null) {
gApiClient.connect();
}
}
@Override
protected void onStop() {
gApiClient.disconnect();
super.onStop();
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.w("ADVSEARCH","Error on connection failed");
}
@Override
public void onConnectionSuspended(int i) {
Log.w("ADVSEARCH","Error on connection suspended");
}
@Override
public void onConnected(Bundle bundle) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
//lastlocation = LocationServices.FusedLocationApi.getLastLocation(gApiClient);
mFusedLocationApi.requestLocationUpdates(gApiClient, locationRequest, new com.google.android.gms.location.LocationListener() {
@Override
public void onLocationChanged(Location location) {
lastlocation = location;
}
});
}
lastlocation = LocationServices.FusedLocationApi.getLastLocation(gApiClient);
}
是的,在OnCreate 我检查权限。最低 API 16,目标 API 25。
每次我第一次打开应用程序时它都会崩溃,因为我在空对象上使用了distanceTo。我错过了什么?我搜索的越多,我就越困惑。
【问题讨论】:
-
“每次我第一次打开应用程序时它都会崩溃,因为我在一个空对象上使用了
distanceTo”——您没有在问题的代码清单中使用distanceTo()。跨度> -
@CommonsWare 它只是
clickListener中的distanceTo(),没有其他相关行。我只写关于位置的代码,我知道lastLocation是空的,因为我在distanceTo()之前记录它。 -
好吧,
getLastLocation()可以返回null。在getLastLocation()或onLocationChanged()设置之前,您无需尝试使用lastlocation。例如,您可以禁用该按钮,直到获得非null位置。