我在我的应用中使用地理围栏。每当我尝试添加地理围栏时,我都会收到以下错误。
IllegalStateException: GoogleApiClient is not connected yet
在AppCompatActivity onCreate方法中,我定义了客户端
/* Create a new google api client */
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
在我的onStart方法中,我连接到它,确保它不为空
/* Connect to the API client */
super.onStart();
if (mGoogleApiClient != null) {
mGoogleApiClient.connect();
}
但仍然会出错。
我的AppCompatActivity实现了OnMapReadyCallback和ResultCallback接口等
我有一个重写方法
@Override
public void onMapReady(GoogleMap googleMap) {}
onMapReady方法包含这行代码
LocationServices.GeofencingApi.addGeofences(
mGoogleApiClient,
getGeofencingRequest(),
getGeofencePendingIntent()
).setResultCallback(MapsActivity.this);
我定义了getGeofencingRequest和getGeofencingPendingIntent私有方法,并覆盖了ResultCallback中的onResult方法。
我花了好几个小时来处理这个错误,似乎无法取得进展。应用程序正常执行,直到AppCompatActivity启动。 onCreate正常发生,onStart也正常发生。
我认为这个错误有两种可能性:
在onStart之前调用onMapReady方法(不太可能)
onStop方法在客户端可用于onMapReady方法之前断开客户端
无论如何,我们都会对错误的解决方案表示赞赏。
完整要点的链接如下: https://gist.github.com/serceberka/0935e185e663a3be13eb13f4b9e0d5ac
答案 0 :(得分:1)
我找到了自己问题的答案。
显然,Google API客户端连接与Google Map连接是分开的。 API客户端专门用于位置服务。
因此我需要在建立API连接后设置地理围栏。
所以我也将所有地理围栏代码都移到了onConnected中。
@Override
public void onConnected(Bundle savedInstanceState) { }
解决了这个问题。
看看更新的要点: https://gist.github.com/serceberka/0935e185e663a3be13eb13f4b9e0d5ac