0

Googleログインを使用してユーザーにログインしています。私は別のアクティビティでログインを処理し、別のアクティビティにサインアウトボタンがあります。Google+サインアウトメソッドがnullポインタ例外を返します

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) 

誰かがこの問題を解決するのに役立ちます。

編集 - 私はまたGoogleApiClient接続を確認せずに試してみましたが、私はまだあなたのアプリケーションクラスでmGoogleApiClientを宣言nullポインタエラー

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

を取得しています。アプリケーションクラスがない場合は、

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); 

この場合、ログアウトに同じ参照を使用できます。 つまり、

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

これは宣言されており、文字列ではありません。 – shmosel

+0

すみません。私は私の答えを言い換えるつもりです。 – Tchinmai

関連する問題