Causés par: java.lang.IllegalStateException: GoogleApiClient n'est pas encore connecté

J'obtiens ce message d'erreur lorsque vous essayez de mettre en œuvre de déconnexion pour la connexion Google pour Android:

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

L'incident se produit dans DrawerActivity.java (ci-dessous), où j'ai appeler le signOut() la méthode.

J'ai regardé les solutions dans d'autres posts et ont essayé, sans succès:

java.lang.IllegalStateException: GoogleApiClient n'est pas encore connecté

GoogleApiClient n'est pas encore connecté exception
Fatal Exception: java.lang.IllegalStateException GoogleApiClient n'est pas encore connecté

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
    }
}

Dans DrawerActivity.java (lorsque je veux effectuer la déconnexion)

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

Dans mon Application une activité qui étend le champ d'Application (utilisé pour stocker le 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

Toute aide serait appréciée. Merci!

  • Si il y a un crash, toujours inclure toute la trace de la pile et le point de la ligne dans votre code où il se produit.
  • Désolé @DougStevenson, j'ai inclus la stacktrace maintenant.
  • pourquoi ne pas vous appeler connecter d'abord si elle n'est pas connectée?
  • Je l'ai fait, à l'aide de mGoogleApiClient.connect() dans onStart();, mais il n'a aucun effet. Je reçois le même crash message. J'ai également appelé .connect() dans le signOut() la méthode, toujours le même plantage du message.
  • Pouvez-vous ajouter un peu de journalisation pour le #handleSignInResult méthode. Cette méthode peut obtenir appelé avec un résultat à défaut ce qui voudrait dire #setClient n'est jamais appelé
  • Hey @Scotty, result.isSuccess() évalue à true, alors la App.getInstance().setClient(mGoogleApiClient); est en fait appelé.
  • Vous devriez envisager d'amerrissage forcé l'enfilage et il suffit de créer un deuxième GoogleApiClient. Selon ce post (stackoverflow.com/a/25190497/608347) le client n'est pas un objet lourd qui pourrait ainsi éviter la confusion de la conception et de faire des choses simples. Même si vous n'allez pas dans cette voie, vous devez bande que #setClient et #getClient code et de voir si vous recevez le même message d'erreur lors de la déconnexion d'une seule activité.
  • Merci @Scotty! J'ai créé un nouveau GoogleApiClient dans le DrawerActivity.java s'méthode onCreate et cela a fonctionné. Si vous poster la réponse, je vais l'accepter 🙂

InformationsquelleAutor Vinnie | 2016-03-07