0

J'utilise le login Google pour me connecter à l'utilisateur. Je gère la connexion dans une autre activité et j'ai un bouton de déconnexion dans une autre activité. Dans la méthode ci-dessus, je déconnecte l'utilisateur et exécute une fonction pour diriger l'utilisateur vers l'activité de connexion. Mais quand j'appuie sur le bouton de déconnexion, j'obtiens l'erreur nullpointer suivante.La méthode de connexion Google+ renvoie l'exception nullpointer

09-22 16:42:29.660 4459-4459/com.myapplication.tester E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.myapplication.tester, PID: 4459 


java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.google.android.gms.common.api.GoogleApiClient.isConnected()' on a null object reference 
                      at com.myapplication.tester.BaseActivity.signOut(BaseActivity.java:190) 
                      at com.myapplication.tester.BaseActivity.onOptionsItemSelected(BaseActivity.java:180) 
                      at android.app.Activity.onMenuItemSelected(Activity.java:2948) 
                      at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:406) 
                      at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:195) 
                      at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:103) 
                      at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:103) 
                      at android.support.v7.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:69) 
                      at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:203) 
                      at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:759) 
                      at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:810) 
                      at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) 
                      at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:957) 
                      at android.support.v7.view.menu.MenuPopup.onItemClick(MenuPopup.java:127) 
                      at android.widget.AdapterView.performItemClick(AdapterView.java:310) 

Je serais heureux si quelqu'un peut m'aider à résoudre ce problème.

Edit - J'ai aussi essayé sans vérifier la connexion GoogleApiClient mais je reçois toujours l'erreur NullPointer

public abstract class BaseActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { 

    private Toolbar mActionBarToolbar; 
    private DrawerLayout mDrawerLayout; 
    protected NavigationView mNavigationView; 
    private ActionBarDrawerToggle mToggle; 
    //Initialized mGoogleApiClient 
    GoogleApiClient mGoogleApiClient; 

    private GoogleApiClient client; 

    protected boolean useToolbar() { 
     return true; 
    } 

    protected boolean useDrawerToggle() { 
     return true; 
    } 

    @Override 
    public void setContentView(int layoutResID) { 
     super.setContentView(layoutResID); 
     getActionBarToolbar(); 
     setupNavDrawer(); 
    }//end setContentView 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // ATTENTION: This was auto-generated to implement the App Indexing API. 
     // See https://g.co/AppIndexing/AndroidStudio for more information. 
     client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); 
    } 
       private void signOut() { 

      Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
        new ResultCallback<Status>() { 
         @Override 
         public void onResult(@NonNull Status status) { 
          loadloginActivity(); 
         } 
        }); 


      } 
     } 
+0

Où initialisez-vous 'mGoogleApiClient'? – Egor

+0

J'ai initialisé au début de la classe avant la méthode onCreate. Ajouté que sur le code. Merci. – Aksh

+0

Ce n'est pas "initialisé". C'est juste déclaré, avec la valeur par défaut de null. – shmosel

Répondre

0

Déclarer la mGoogleApiClient dans votre classe d'application. Si vous ne disposez pas d'une classe d'application, créez comme

public class MyApplication extends Application { 
     public static GoogleApiClient mGoogleApiClient; 
     @Override 
     public void onCreate() { 
      super.onCreate(); 
     } 
} 

Et instancier dans l'activité de connexion. comme

MyApplcation.mGoogleApiClient= new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(Plus.API, Plus.PlusOptions.builder().build()) 
       .addScope(Plus.SCOPE_PLUS_LOGIN); 

vous pouvez ensuite utiliser la même référence pour se déconnecter. i.e, Comme

if (MyApplication.mGoogleApiClient.isConnected()) { 
     //Your Logout Logic 
     MyApplication.mGoogleApiClient.disconnect(); 
     MyApplication.mGoogleApiClient=null; 
} 
+0

Il est déclaré, et ce n'est pas une chaîne. – shmosel

+0

Je suis désolé. Je vais reformuler ma réponse. – Tchinmai