0

Я использую логин google для входа в систему. Я обрабатываю логин в другом действии, и у меня есть кнопка выписки в другом действии.Метод signue Google+ возвращает исключение nullpointer

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

    } 
    } 

В приведенном выше методе я выхожу из системы и выполняю функцию, чтобы направлять пользователя к активности входа. Но когда я нажимаю кнопку вывешивания, я получаю следующую ошибку 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) 

Я был бы рад, если кто-то может помочь мне исправить эту проблему.

Edit - Я также попытался без проверки соединения GoogleApiClient, но я все еще получаю ошибку 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

Где вы инициализируете 'mGoogleApiClient'? – Egor

+0

Я инициализировал в начале класса перед методом onCreate. Добавлено это на код. Благодарю. – Aksh

+0

Это не «инициализировано». Он просто объявлен со значением по умолчанию null. – shmosel

ответ

0

Объявите mGoogleApiClient в своем классе приложений. Если у вас нет класса приложения, создайте его как

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

И введите его в действие входа в систему. как

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

Вы можете использовать ту же ссылку для выхода из системы. i.e, Like

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

Объявлено, и это не строка. – shmosel

+0

Прошу прощения. Я перефразирую свой ответ. – Tchinmai