1

私は自分のアプリでジオフェンシングを使用しています。ジオフェンスを追加しようとすると、次のエラーが発生します。私はクライアントにandroid geofencing java.lang.IllegalStateException:GoogleApiClientがまだ接続されていません

/* 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(); 
} 

nullではないが、それでも、それはそのエラーを与えることを確実にすること、それに接続するAppCompatActivityのonCreateメソッドで

IllegalStateException: GoogleApiClient is not connected yet 

マイAppCompatActivityは

@Override 
public void onMapReady(GoogleMap googleMap) {} 

onMapReady方法がIが定義されている

LocationServices.GeofencingApi.addGeofences(
mGoogleApiClient, 
     getGeofencingRequest(), 
     getGeofencePendingIntent() 
).setResultCallback(MapsActivity.this); 

このコード行を含む私がオーバーライドされたメソッドを持っている

とりわけOnMapReadyCallbackとResultCallbackインタフェースを実装getGeofencingRequest getGeofencingPendingIntentプライベートメソッドをオーバーライドし、ResultCallbackのonResultメソッドをオーバーライドします。

私はこのエラーで数時間と数時間を費やしており、前進するようには見えません。 AppCompatActivityが開始されるまで、Appは正常に実行されます。 onCreateは正常に発生し、onStartも正常に発生します。

私はこのエラーの二つの可能性があると思う:それはonMapReadyに利用可能になる前

  1. onMapReady方法は、(そう)ONSTART前に呼び出されている

  2. onStopメソッドは、クライアントを切断方法

エラーに若干の解決が認められます。フル要旨へ

リンクは以下の通りです: https://gist.github.com/serceberka/0935e185e663a3be13eb13f4b9e0d5ac

+0

を。なぜなら、それをonStart()に置くことはあまり良い考えではないからです。 –

+0

@mihir rajそうではありません。実際には、Google APIクライアントが接続される前にジオファンスを作成しようとしていました。 onMapReadyは、onConnectedメソッドが呼び出される前にgoogle apiクライアントをリクエストしていました。そこで、onMapReadyメソッドのすべてのジオフェンスコードをonConnectedメソッドに移動し、うまくいきました。 – 4blun3kin

答えて

1

私は自分の質問への答えを見つけました。

明らかに、Google APIクライアント接続は、Googleマップ接続とは別のものです。 APIクライアントは、特にロケーションサービス用です。

API接続が確立された後、ジオフェンシングを設定する必要がありました。

私はonConnectedの内部にすべてのジオフェンシングコードを移動しました。

@Override 
public void onConnected(Bundle savedInstanceState) { } 

それが問題を解決しました。

更新要旨を見てみましょう:私は最初の可能性は、エラーのあなたの原因だと思います https://gist.github.com/serceberka/0935e185e663a3be13eb13f4b9e0d5ac

+0

あなたの解決策は正しいです。 connectメソッド()を呼び出した後、接続要求が完了するたびにonConnected()メソッドが自動的に呼び出されます。したがって、onConnected()メソッドで行うタスクを記述する必要があります。そうしないと、GoogleApiClientオブジェクトでnullポインタ例外が発生します。 このドキュメントを参照すると、onConnected()メソッドの詳細を知ることができます。リンク:https://developers.google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient.ConnectionCallbacks –

関連する問題