1. ホーム
  2. android

GoogleApiClientがonConnected関数を呼び出した後に "GoogleApiClient is not connected yet "と表示される。

2023-10-01 05:24:29

質問

GoogleApiClientについて、よくわからないことがありました。 GoogleApiClientについて という関数があります。 onConnected という関数があり、これはクライアントが 接続された (確実に)接続されているときに実行されます。

という自作関数を手に入れました。 startLocationListening これは最終的に で呼び出され、GoogleApiClientの onConnected 関数で呼び出されます。

そこで私の startLocationListening関数は、GoogleApiClientの接続がないと実行できませんでした。

コードとログです。

@Override
public void onConnected(Bundle bundle) {
    log("Google_Api_Client:connected.");
    initLocationRequest();
    startLocationListening(); //Exception caught inside this function
}

...

private void startLocationListening() {
    log("Starting_location_listening:now");

    //Exception caught here below:
    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
   }

例外が発生します。

03-30 12:23:28.947: E/AndroidRuntime(4936):     java.lang.IllegalStateException: GoogleApiClient is not connected yet.
03-30 12:23:28.947: E/AndroidRuntime(4936):     at com.google.android.gms.internal.jx.a(Unknown Source)
03-30 12:23:28.947: E/AndroidRuntime(4936):     at com.google.android.gms.common.api.c.b(Unknown Source)
03-30 12:23:28.947: E/AndroidRuntime(4936):     at com.google.android.gms.internal.nf.requestLocationUpdates(Unknown Source)
03-30 12:23:28.947: E/AndroidRuntime(4936):     at hu.company.testproject.service.GpsService.startLocationListening(GpsService.java:169)
03-30 12:23:28.947: E/AndroidRuntime(4936):     at hu.company.testproject.service.GpsService.onConnected(GpsService.java:259)

...

また、デバッグログによると onConnected 関数が呼び出されました。 :

03-30 12:23:28.847: I/Locationing_GpsService(4936): Google_Api_Client:connected.
03-30 12:23:28.857: I/Locationing_GpsService(4936): initLocationRequest:initing_now
03-30 12:23:28.877: I/Locationing_GpsService(4936): initLocationRequest:interval_5000
03-30 12:23:28.897: I/Locationing_GpsService(4936): initLocationRequest:priority_100
03-30 12:23:28.917: I/Locationing_GpsService(4936): Starting_location_listening:now

この後、例外が発生しました。

私はここで何かを見逃しているのでしょうか?私は "connected" の応答を得ました。私の func を実行すると、エラー "not connected" を得ました。さらに、1つ厄介なことに、この位置情報サービスを数週間使用していますが、このエラーは一度も発生していません。

E D I T :

私はより具体的なログ出力を追加しました、ちょうど私の心を吹きました、これをチェックしてください。

@Override
    public void onConnected(Bundle bundle) {

        if(mGoogleApiClient.isConnected()){
            log("Google_Api_Client: It was connected on (onConnected) function, working as it should.");
        }
        else{
            log("Google_Api_Client: It was NOT connected on (onConnected) function, It is definetly bugged.");
        }

        initLocationRequest();
        startLocationListening();
    }

のログを出力します。

03-30 16:20:00.950: I/Locationing_GpsService(16608): Google_Api_Client:connected.
03-30 16:20:00.960: I/Locationing_GpsService(16608): Google_Api_Client: It was NOT connected on (onConnected) function, It is definetly bugged.

はい、先ほど mGoogleApiClient.isConnected() == falseonConnected() とはどういうことでしょうか?

E D I Tです。

評判の良い懸賞金をかけても誰も答えられなかったので。 バグとしてGoogleに報告することにしました。 次に来たのは、私にとって本当に驚くべきことでした。 私の報告に対するGoogleの公式回答です。

このウェブサイトは、AOSP Android ソース コードおよび開発者用ツールセットに関する開発者の問題を扱うものです。 コードおよび開発者ツールセットに関する開発者の問題を扱うものであり、Google のアプリやサービス (Playサービス、GMS、Google API など) を扱うものではありません。 Play サービス、GMS、Google API などの Google アプリやサービスではありません。残念ながら Play Services のバグを報告する適切な場所はないようです。私が言えることは このウェブサイトはそのような場所ではありません。Google の製品フォーラムに投稿してみてください。 Product Forums に投稿してみてください。

問題の全容 をここに報告します。 (くだらないからと削除されないことを祈ります)

そうそう、Google Product Forumsを見てみましたが、このことを投稿するトピックが見つからなかったので、今のところ困惑して動けずにいます。

地球上の誰もがこれで私を助けることができますか?

E D I T:

全コードは ペーストビン

どのように解決するのですか?

onStartCommand()でgoogleApiClientを作成していることに今気づきました。これは悪いアイデアのように思えます。

あなたのサービスが2回トリガーされたとしましょう。2つのgoogleApiClientオブジェクトが作成されますが、あなたは1つだけを参照することになります。もし、参照を持たない方のオブジェクトがonConnected()のコールバックを実行した場合、そのクライアントでは接続されますが、実際に参照を持つクライアントはまだ接続されていない可能性があります。

私はそれが起こっていることを疑います。googleApiClientの作成をonCreateに移動して、同じ動作が起こるかどうか試してみてください。