0

Ich verwende den Google-Login, um mich beim Benutzer anzumelden. Ich handhabe Login in einer anderen Aktivität und ich habe eine Abmelde-Taste in einer anderen Aktivität.Google+ signout-Methode gibt nullpointer-Ausnahme zurück

In der obigen Methode signiere ich den Benutzer ab und führe eine Funktion aus, um den Benutzer zur Anmeldeaktivität zu leiten. Aber wenn ich die Abmeldeschaltfläche drücke, erhalte ich den folgenden Nullpointer-Fehler.

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) 

Ich würde mich freuen, wenn mir jemand helfen kann, dieses Problem zu beheben.

Bearbeiten - Ich habe auch versucht, ohne die GoogleApiClient Verbindung überprüft, aber ich bin immer noch Nullpointer Fehler immer

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

Wo initialisieren Sie 'mGoogleApiClient'? – Egor

+0

Ich initialisierte am Anfang der Klasse vor der OnCreate-Methode. Hinzugefügt das auf dem Code. Vielen Dank. – Aksh

+0

Es ist nicht "initialisiert". Es ist nur deklariert, mit dem Standardwert von null. – shmosel

Antwort

0

die mGoogleApiClient Klasse in Ihrer Anwendung erklären. Wenn Sie über keine Anwendungsklasse verfügen, erstellen Sie sie als

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

Und instanziieren Sie es in der Login-Aktivität. als

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

können Sie dann die gleiche Referenz verwenden, um sich abzumelden. d. H. Wie

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

Es ist deklariert, und es ist kein String. – shmosel

+0

Es tut mir leid. Ich werde meine Antwort umformulieren. – Tchinmai

Verwandte Themen