引起原因:java.lang.IllegalStateException:尚未连接GoogleApiClient [英] Caused by: java.lang.IllegalStateException: GoogleApiClient is not connected yet

查看:243
本文介绍了引起原因:java.lang.IllegalStateException:尚未连接GoogleApiClient的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当尝试为Android的Google登录实施登出时,我收到此错误消息:

 原因:java .lang.IllegalStateException:尚未连接GoogleApiClient。 

崩溃发生在DrawerActivity.java(如下所示)中,在这里我称为signOut()方法。 / p>

我已经查看了其他帖子中的解决方案,并尝试了以下方法:



java.lang.IllegalStateException:GoogleApiClient尚未连接



GoogleApiClient尚未连接但异常
致命异常:java.lang.IllegalStateException GoogleApiClient尚未连接



MainActivity.java:

 受保护的无效onCreate(Bundle savedInstanceState){
mGoogleApiClient = new GoogleApiClient.Build er(this)
.enableAutoManage(this,this)
.addApi(Auth.GOOGLE_SIGN_IN_API,gso)
.build();
// ...未显示Google登录的其他代码
}

受保护的void onStart(){
mGoogleApiClient.connect();
}

private void handleSignInResult(GoogleSignInResult result){
if(result.isSuccess()){
App.getInstance()。setClient(mGoogleApiClient);
//开始DrawerActivity
}
}

在DrawerActivity中。 java(我要在其中执行登出的地方)

  private void googleSignOut(){
mGoogleApiClient = App.getInstance ().getClient();
Auth.GoogleSignInApi.signOut(mGoogleApiClient);
}

在我扩展应用程序(用于存储GoogleApiClient)的App活动中

 公共类应用程序扩展了应用{{b 
$ b private GoogleApiClient mGoogleApiClient;
私有静态应用mInstance;

@Override
public void onCreate(){
super.onCreate();
mInstance = this;
}

公共静态同步应用程序getInstance(){
return mInstance;
}

public void setClient(GoogleApiClient client){
mGoogleApiClient = client;
}

public GoogleApiClient getClient(){
return mGoogleApiClient;
}
}

StackTrace:

  21:33.314 25375-25375 / com.me.myapp E / Android运行时:致命例外:主
进程:com.me.myapp,PID:25375
java.lang.IllegalStateException:GoogleApiClient尚未连接。 com.google.android.gms.internal.zzmf.zzb(未知来源)的
com.google.android.gms.internal.zzmi.zzb(未知来源)的
com com.google.android.gms.auth.api.signin.internal.zzc.signOut(未知源)
(com上的.google.android.gms.internal.zzmg.zzb(未知源)
.me.myapp.DrawerActivity.googleSignOut(DrawerActivity.java:526)
在com.me.myapp.DrawerActivity.onNavigationDrawerItemSelected(DrawerActivity.java:512)
在com.me.myapp.NavigationDrawerFragment.selectItem (NavigationDrawerFragment.java:201)
在com.me.myapp.NavigationDrawerFragment.access $ 000(NavigationDrawerFragment.java:31)
在com.me.myapp.NavigationDrawerFragment $ 1.onItemClick(NavigationDrawerFragment.java:98) )
在android.widget.AdapterView.performItemClick(AdapterView.java:310)
在android.widget.AbsListView.performItemClick(AbsListView.java:1145)
在android.widget.AbsListView $ PerformClick.run(AbsListView.java:3042)
,位于android.widget.AbsListView $ 3.run(AbsListView。 java:3879)android.os.Handler.handleCallback(Handler.java:739)
android.os.Handler.dispatchMessage(Handler.java:95)
android.os.Handler.handleCallback(Handler.java:739)
.Looper.loop(Looper.java:148)
在android.app.ActivityThread.main(ActivityThread.java:5417)
在java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteI

任何帮助都会不胜感激。谢谢!

解决方案

您应该放弃线程,只创建第二个 GoogleApiClient 。根据这篇文章( https://stackoverflow.com/a/25190497/608347 ),客户端并不繁重因此最好避免使用混乱的设计并使事情变得简单。即使您不走这条路,也应该删除 #setClient #getClient 代码,看看是否得到与单个活动断开连接时会出现相同的错误


I am getting this error message when trying to implement logout for Google Sign-In for Android:

Caused by: java.lang.IllegalStateException: GoogleApiClient is not connected yet.

The crash occurs in DrawerActivity.java (below), where I call the signOut() method.

I've looked at the solutions in other posts and have tried them to no avail:

java.lang.IllegalStateException: GoogleApiClient is not connected yet

GoogleApiClient is not connected yet exception Fatal Exception: java.lang.IllegalStateException GoogleApiClient is not connected yet

MainActivity.java:

protected void onCreate(Bundle savedInstanceState) {
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this, this)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();
    //... other code for google sign in not shown
}

protected void onStart() {
    mGoogleApiClient.connect();
}

private void handleSignInResult(GoogleSignInResult result) {
    if (result.isSuccess()) {
        App.getInstance().setClient(mGoogleApiClient);
        //start DrawerActivity
    }
}

In DrawerActivity.java (where I want to perform the sign out)

private void googleSignOut(){
    mGoogleApiClient = App.getInstance().getClient();
    Auth.GoogleSignInApi.signOut(mGoogleApiClient);
}

In my App activity that extends Application (used to store the GoogleApiClient)

public class App extends Application {

    private GoogleApiClient mGoogleApiClient;
    private static App mInstance;

    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
    }

    public static synchronized App getInstance() {
        return mInstance;
    }

    public void setClient(GoogleApiClient client){
        mGoogleApiClient = client;
    }

    public GoogleApiClient getClient(){
        return mGoogleApiClient;
    }
}

StackTrace:

21:33.314 25375-25375/com.me.myapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.me.myapp, PID: 25375
java.lang.IllegalStateException: GoogleApiClient is not connected yet.
at com.google.android.gms.internal.zzmf.zzb(Unknown Source)
at com.google.android.gms.internal.zzmi.zzb(Unknown Source)
at com.google.android.gms.internal.zzmg.zzb(Unknown Source)
at com.google.android.gms.auth.api.signin.internal.zzc.signOut(Unknown Source)
at com.me.myapp.DrawerActivity.googleSignOut(DrawerActivity.java:526)
at com.me.myapp.DrawerActivity.onNavigationDrawerItemSelected(DrawerActivity.java:512)
at com.me.myapp.NavigationDrawerFragment.selectItem(NavigationDrawerFragment.java:201)
at com.me.myapp.NavigationDrawerFragment.access$000(NavigationDrawerFragment.java:31)
at com.me.myapp.NavigationDrawerFragment$1.onItemClick(NavigationDrawerFragment.java:98)
at android.widget.AdapterView.performItemClick(AdapterView.java:310)
at android.widget.AbsListView.performItemClick(AbsListView.java:1145)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3042)
at android.widget.AbsListView$3.run(AbsListView.java:3879)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteI

Any help would be appreciated. Thanks!

解决方案

You should ditch the threading and just create a second GoogleApiClient. According to this post (https://stackoverflow.com/a/25190497/608347) the client isn't a heavy object so might as well avoid the confusing design and make things simple. Even if you dont go down this path you should strip out that #setClient and #getClient code and see if you get the same error when disconnecting from a single activity

这篇关于引起原因:java.lang.IllegalStateException:尚未连接GoogleApiClient的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆