【发布时间】:2017-09-07 20:27:04
【问题描述】:
我有一个用于创建包含 GoogleApiClient 的地理围栏的类,当前由两个活动访问(由关注 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 客户端正在重新连接,但由于某种原因,当我尝试访问它时,我得到一个空值。
这是显示两者的 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)
在这个问题上相当迷惑,所以任何帮助都将不胜感激!如果还有什么我可以提供的帮助,请告诉我,我会添加它。
【问题讨论】:
标签: android android-fragments google-api-client