Android GoogleApiClient正在抛出;GoogleAppClient尚未连接”;调用onConnected函数后

Android GoogleApiClient正在抛出;GoogleAppClient尚未连接”;调用onConnected函数后,android,google-play-services,google-api-client,android-googleapiclient,Android,Google Play Services,Google Api Client,Android Googleapiclient,所以我发现了一些关于GoogleapClient的不太清楚的地方。 GoogleApiClient有一个名为onConnected的函数,该函数在客户端连接时运行(当然) 我有了自己的函数:startLocationListening,它最终被GoogleAppClient的onConnected函数调用 因此,如果没有GoogleAppClient连接,我的startLocationListening功能无法运行。 代码和日志: @Override public void onConnecte

所以我发现了一些关于GoogleapClient的不太清楚的地方。 GoogleApiClient有一个名为onConnected的函数,该函数在客户端连接时运行(当然)

我有了自己的函数:startLocationListening,它最终被GoogleAppClient的onConnected函数调用

因此,如果没有GoogleAppClient连接,我的startLocationListening功能无法运行。

代码和日志:

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

例外情况是:

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
在这之后,我得到了一个例外

我是不是遗漏了什么?我得到了一个“已连接”的响应我运行了我的func,我得到了错误“未连接”这是什么?另外一件恼人的事是:我使用这个定位服务已经好几个星期了,但从来没有遇到过这个错误

E-D-it:

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)
我添加了一个更具体的日志输出,让我大吃一惊,看看这个:

@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.
是的,我刚刚得到了
mgoogleapclient.isConnected()==false
内部
onConnected()
这怎么可能

E-D-it:

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)
由于没有人能回答这个问题,即使是声誉悬赏,我决定将此作为一个bug报告给谷歌。接下来发生的事情让我非常惊讶。 谷歌对我的报告的官方答复:

“此网站是为开发者提供AOSP Android源代码的问题 代码和开发者工具集,而不是谷歌应用程序或服务,例如 播放服务、GMS或谷歌API。不幸的是,似乎没有 是一个报告游戏服务错误的合适地方。我所能做的就是 我想说的是,这个网站不是,对不起。试着在谷歌上发布 取而代之的是产品论坛。”

完整问题(我希望他们不会因为它愚蠢而删除它)

所以,是的,我看了谷歌产品论坛,就是找不到任何主题来发布这件事,所以现在我感到困惑和困惑

地球上有人能帮我吗?

E-D-it:

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)

中的完整代码我刚刚注意到您正在onStartCommand()中创建GoogleAppClient。这似乎是个坏主意

假设您的服务被触发两次。将创建两个GoogleAppClient对象,但您只能引用其中一个。如果您没有引用的客户端执行其对onConnected()的回调,则您将在该客户端中连接,但您实际拥有引用的客户端仍可能未连接


我怀疑这就是发生的事情。尝试将您的GoogleAppClient创建移动到onCreate,看看是否得到相同的行为。

我也有相同的错误,但我的问题与iheanyl的答案不同:


我已经声明GoogleAppClient为静态。这阻止了android关闭该服务。

将googleApi创建移动到onCreate为我解决了这个问题。

我在onCreate和onresume中意外发现GoogleAppClient.connect()时遇到了这个问题。刚刚从oncreate中删除了它。

您应该在活动的onCreate(Bundle)方法中实例化一个客户机对象,然后在onStart()中调用connect(),在onStop()中调用disconnect(),而不管状态如何

GoogleAppClient的实现似乎只针对单个实例设计。最好在onCreate中只实例化一次,然后使用单个实例执行连接和断开连接

在onStart()方法中调用connect()方法


我想我找到了问题的根源,它与API无关。每次安装应用程序时,我都会遇到这个问题。顺便说一句,就像最流行的评论一样,我只有一个GoogleAppClient在暂停和恢复时。我注意到弹出了获取地理位置访问权限的请求。正如您所知,在您的活动中,这将变成暂停,一旦弹出窗口消失,它将继续您的活动。最有可能的是,您的Google客户端也被链接到这些事件以断开连接。一旦许可被接受,并且即将执行GoogleAppClient任务,您就可以判断没有连接

 if(googleApiClient.isConnected()){

        rxPermissions
                .request(Manifest.permission.ACCESS_FINE_LOCATION)
                .subscribe(granted -> {

                 if (granted) {
                        //here it could be client is already disconnected!!     
                        _geolocateAddress(response);
                    } else {
                        // Oups permission denied
                    }
                });
    }
您可以跳过断开和连接,因为您设置了一个标志,该标志在获得许可之前为true,并且一旦GoogleAppClient任务完成或
被授予
为false

if(googleApiClient.isConnected()){
        isRequestingPermission = true;
        rxPermissions
                .request(Manifest.permission.ACCESS_FINE_LOCATION)
                .subscribe(granted -> {
                    if (granted && googleApiClient.isConnected()) {
                        //Once the task succeeds or fails set flag to false
                        //at _geolocateAddress
                        _geolocateAddress(response);
                    } else {
                        // Oups permission denied
                        isRequestingPermission = false;
                    }
                });
    }
我们还可以单独拆分doing权限,如果被授予,则进行任务调用。好吧,我要承认我使用了一个片段,我重新安装了这个应用程序,甚至在权限上旋转了屏幕,一旦被授予,结果就会显示出来。我希望这能帮助其他人

  • 你不必卸载该应用程序。只需转到设置/应用程序管理器/您的应用程序/权限并关闭任何设置,然后再次测试应用程序

我遇到了这个问题,我通过将GoogleAppClient声明为静态对象解决了这个问题

将GoogleAppClient从onStart命令移动到onCreate解决了我的问题

您是否也可以向onConnectionSuspended()添加一些日志记录,以查看是否随时调用它?@Antiveranna我在onConnectionSuspended()上也有日志记录当时,从未调用过该函数。您是否也可以发布创建mGoogleApiClient的代码?@AntiVeeranna在中添加了代码pastebin@Dima正如Iheani所说,“尝试将您的GoogleAppClient创建移动到onCreate,看看您是否得到相同的行为。”它可以确保GoogleAppClient只生成一个实例,并且您的服务不再包含错误的引用。是的,我认为您是对的!嗨@iheani。我正在MainActivity的onCreate()方法上创建“GoogleAppClient”对象。但是我在一些设备上发现了这个错误。“对此你能说些什么?”SattarHummatli很难说。这方面的情况