75

そのため、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

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

ここで何か不足していますか?「接続済み」の応答がありました。関数を実行したところ、「接続されていません」というエラーが表示されました。これは何ですか? さらに厄介なことに、この位置情報サービスを数週間使用しましたが、このエラーは発生しませんでした。

編集 :

より具体的なログ出力を追加しましたが、びっくりしました。これを確認してください。

@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() == false入ったばかりonConnected()です。

編集:

評判報奨金があっても誰もこれに答えることができなかったので、これをバグとして Google に報告することにしました。次に来たことは、私にとって本当に驚きでした。私のレポートに対するGoogleの公式回答:

「このウェブサイトは、Play サービス、GMS、Google API などの Google アプリやサービスではなく、AOSP Android ソース コードと開発者ツールセットに関する開発者の問題を対象としています。残念ながら、Play サービスのバグを報告する適切な場所はないようです。 。申し訳ありませんが、このウェブサイトはそうではありません。代わりに、Google プロダクト フォーラムに投稿してみてください。」

完全な問題レポートはこちら。(バカだからって削除しないでほしい)

そうですね、私は Google プロダクト フォーラムを調べましたが、このことを投稿するトピックが見つかりませんでした。そのため、現時点では困惑して立ち往生しています。

惑星地球の誰かがこれを手伝ってくれますか?

編集:

ペーストビンの完全なコード

4

9 に答える 9

3

同じエラーが発生しましたが、問題は iheanyl の回答とは異なりました。

googleApiClient static を宣言しました。これにより、Android がサービスをシャットダウンできなくなりました。

于 2015-09-28T20:30:19.577 に答える
2

私はこの問題を抱えていましたが、 googleApiClient を静的オブジェクトとして宣言することで解決しました

于 2017-12-20T16:34:40.627 に答える
0

https://developer.android.com/reference/com/google/android/gms/common/api/GoogleApiClient.html

アクティビティの onCreate(Bundle) メソッドでクライアント オブジェクトをインスタンス化してから、状態に関係なく、onStart() で connect() を呼び出し、onStop() で disconnect() を呼び出す必要があります。

GoogleApiClient の実装は、単一のインスタンス用に設計されているようです。onCreate で 1 回だけインスタンス化してから、単一のインスタンスを使用して接続と切断を実行することをお勧めします。

于 2017-07-19T04:35:55.653 に答える
-1

oncreate と onresume で googleApiClient.connect() を誤って実行したときに、この問題が発生しました。oncreateから削除しただけです。

于 2016-05-31T07:03:51.847 に答える