【发布时间】:2017-05-29 16:52:29
【问题描述】:
我在我的应用程序中使用地理围栏。每当我尝试添加地理围栏时,都会出现以下错误。
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 也正常发生。
我认为这个错误有两种可能:
onMapReady 方法在 onStart 之前被调用(不太可能)
onStop 方法在 onMapReady 方法可用之前断开客户端的连接
我们将不胜感激。
完整要点的链接如下: https://gist.github.com/serceberka/0935e185e663a3be13eb13f4b9e0d5ac
【问题讨论】:
-
我认为第一种可能是你的错误原因。因为把它放在 onStart() 上是个坏主意。
-
@mihir raj 事实并非如此,实际上我试图在连接 google api 客户端之前创建地理围栏。 onMapReady 在调用 onConnected 方法之前正在请求 google api 客户端。所以我将 onMapReady 方法中的所有地理围栏代码移到 onConnected 方法中,它工作正常。
标签: android illegalstateexception geofencing android-geofence location-services