Search code examples
javaandroidgoogle-apigoogle-plusgoogle-api-client

When I try to signout from GoogleApiClient I got Error message GoogleApiClient.isConnected() on a null object reference


When I try to sign out from GoogleApiClient I got the following error message

GoogleApiClient.isConnected() on a null object reference

Here is my code:

public static GoogleSignInOptions gso;
public static GoogleApiClient mGoogleApiClient;

//.........

google.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
             gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail().build();
            mGoogleApiClient = new GoogleApiClient.Builder(getContext()).enableAutoManage(getActivity(), new GoogleApiClient.OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
                    Toast.makeText(getContext(), "Login failed", Toast.LENGTH_LONG).show();
                }
            }).addApi(Auth.GOOGLE_SIGN_IN_API, gso).build();
            Intent intent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
            startActivityForResult(intent, requestCode);
            mGoogleApiClient.connect();


            Toast.makeText(getContext(),"User Name "+ acc.getDisplayName()+ "Mail  "+acc.getEmail(), Toast.LENGTH_LONG).show();
        }
    });

and my sign out code

  public void signout(){
    Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(new ResultCallback<Status>() {
        @Override
        public void onResult(@NonNull Status status) {
            Intent intent1 = new Intent(getContext(),LoginActivity.class);
            startActivity(intent1);
            getActivity().finish();
        }
    });

And I also tried:

if (UserLogin.mGoogleApiClient.isConnected()) {
    UserLogin.mGoogleApiClient.disconnect();
}

Solution

  • Try this...

    Define:

    public GoogleSignInOptions gso;
    public GoogleApiClient mGoogleApiClient;
    

    Initialize in Oncreate method:

    gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestEmail()
        .build();
    
    mGoogleApiClient = new GoogleApiClient.Builder(this)
        .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
        .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
        .build();
      mGoogleApiClient.connect();
    

    Now set click listener on signIn button

    google.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    
            Intent intent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
            startActivityForResult(intent, requestCode);
    
            Toast.makeText(getContext(),"User Name "+ acc.getDisplayName()+ "Mail  "+acc.getEmail(), Toast.LENGTH_LONG).show();
        }
    });
    

    /////

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
    Toast.makeText(getContext(), "Login failed", Toast.LENGTH_LONG).show();
    }
    

    //Sign out

    private void signOut() {
    Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
            new ResultCallback<Status>() {
                @Override
                public void onResult(Status status) {
                 Intent intent1 = new Intent(getContext(),LoginActivity.class);
                 startActivity(intent1);
                 getActivity().finish();
                }
            });
    }
    

    Hope this will help you.