手机旋转后,GoogleAPIClient无法连接

时间:2017-09-07 20:27:04

标签: android android-fragments google-api-client

我有一个用于创建包含GoogleApiClient的Geofences的课程,该课程目前由两个活动访问(由this tutorial创建)。我把这个类设置为非UI片段,因为据我所知(如果我错了,请纠正我!)GoogleApiClient需要附加到生命周期,并且能够连接多个地点我无法将其嵌入到活动中。

在活动中,我创建片段;

private GeofenceUtilityFragment geofenceUtils = new GeofenceUtilityFragment();

并将其添加到活动中;

if (savedInstanceState == null) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().add(geofenceUtils, getString(R.string.fragment_key_geofence_utils)).commit();
}

当用户首次导航到活动时,一切都有效。但是,当应用程序被旋转时(或者可能导致重绘的任何其他事件),GoogleApiClient会返回一个空对象引用。

方法调用;

private void setGeofences(){
    if (!mGoogleApiClient.isConnected()){
        Toast.makeText(activityContext, "not connected", Toast.LENGTH_SHORT).show();
        return;
    }

但令人困惑的是,在旋转之后,onConnected回调会触发,因此API客户端正在重新连接,但出于某种原因,当我尝试访问它时,我得到一个null。

这里有Log语句显示两个(中间切出一些额外的绒毛)

0387/com.example.android.bentheredonethat D/GeofenceUtilityFragment: onConnected has just been called

[...]

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.google.android.gms.common.api.GoogleApiClient.isConnected()' on a null object reference
                                                                                      at geolocationtools.GeofenceUtilityFragment.setGeofences(GeofenceUtilityFragment.java:179)
                                                                                      at geolocationtools.GeofenceUtilityFragment.callGeofenceRoutine(GeofenceUtilityFragment.java:220)
                                                                                      at com.example.android.bentheredonethat.RouteDetailsActivity.startRouteButtonHandler(RouteDetailsActivity.java:321)

非常喜欢这个,所以任何帮助将不胜感激!如果我能提供其他任何帮助,请告诉我,我会添加它。

1 个答案:

答案 0 :(得分:0)

GoogleApiClient可以附加到Activity,并设置为自动管理,也可以附加到应用程序(或其他Singleton),并手动管理。您将它附加到非ui片段是没有意义的,因为它没有生命周期且无法自动管理。
根据您的需要,扩展应用程序类(Google获取说明),向其中添加GoogleApiClient变量。在应用程序的onCreate中初始化它,并处理onConnected回调。