2017-09-07 8 views
0

現在、2つのアクティビティ(this tutorial)によってアクセスされているGoogleApiClientを含むジオフェンスを作成するクラスがあります。 (私が間違っていれば私を修正してください!)GoogleApiClientはライフサイクルにアタッチされ、複数の場所に接続できるようにする必要があるため、私はクラスを非UIフラグメントとして設定しました。それをアクティビティに埋め込むことはできません。GoogleAPICクライアントが電話を回した後に接続しない

アクティビティ内で、私はフラグメントを作成します。

private GeofenceUtilityFragment geofenceUtils = new GeofenceUtilityFragment(); 

アクティビティに追加します。

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

ユーザーが最初にアクティビティに移動すると、すべてが処理されます。しかし、アプリが回転されたとき(または、再描画を引き起こす他のイベントの場合)、GoogleApiClientはnullオブジェクト参照を返します。

メソッド呼び出し;それはすべてが本当に混乱になり何

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

しかし、APIクライアントが再接続されるように回転した後、onConnectedコールバックは、トリガということですが、私はそれにアクセスしようとすると、何らかの理由で私はNULLを取得します。

は、ここでは、2つ(途中でいくつかの追加の綿毛とを切り出し)を示すログの文

プリティこの1に酔っぱらっ
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) 

ので、任意の助けをいただければ幸いです!私がこれを助けるために提供できる他のものがあれば、私に知らせて、私はそれを追加します。

答えて

0

GoogleApiClientはアクティビティにアタッチすることができ、オートマネージメントに設定することも、アプリケーション(または別のシングルトン)にアタッチして手動で管理することもできます。ライフサイクルを持たず、自動管理することもできないため、非Uiフラグメントへの接続は意味をなさない。
必要に応じて、アプリケーションクラス(Google for instructions)を拡張し、GoogleApiClient変数を追加します。アプリケーションのonCreateで初期化し、onConnectedコールバックを処理します。

+0

私は現在、データベースアクセスを管理するためにアプリケーションクラスを使用しています(データベース呼び出しを最小限に抑えるために結果をキャッシュするため)。アプリケーションクラスは1つしか許可されていませんか?私は自家用車を調べるでしょう、ありがとう。 – Biggs

+0

@Biggs同じApplicationクラスを使用します。アプリケーションクラスが混乱しているようです。 – lionscribe

+0

私は当初、井戸のメアリーではなく、最もよく考えられたデザインとして使用したことを認めなければなりません。私の非常に基本的な理解は、それがアプリケーションの生活の中で存在するクラスだということですが、それよりはるかに微妙なことは確かです。 – Biggs

関連する問題