0

FirebaseとGoogle認証を追加したアプリを作成しました。AndroidでGoogleSignInResultオブジェクトから名前とメールを表示するにはどうすればよいですか?

authStateListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = auth.getCurrentUser(); 
      if (user != null) { 
       // 
      } else { 
       startActivityForResult(
         AuthUI.getInstance() 
           .createSignInIntentBuilder() 
           .setIsSmartLockEnabled(false) 
           .setProviders(Arrays.asList(
             new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build(), 
             new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER).build(), 
             new AuthUI.IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER).build())) 
           .build(), 
         RC_SIGN_IN); 
      } 
     } 
    }; 

私がGoogle Sign Inボタンをクリックすると、自分のアカウントに正しくログインしています。しかし、人の名前と電子メールを表示しようとすると、サインインされるとエラーが表示されます。私はonActivityResultメソッドでこのコードを使用しています。acctは常にnullです。どこが間違っていますか?

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == RC_SIGN_IN) { 
     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(getIntent()); 
     GoogleSignInAccount acct = result.getSignInAccount(); //null 
     String personName = acct.getDisplayName(); 
     String personEmail = acct.getEmail(); 
     System.out.println(personName + "/" + personEmail); 
    } 
} 

これはエラーです:ATAL EXCEPTION: main java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=111, result=-1, data=Intent { (has extras) }} to activity ..... java.lang.NullPointerException。 ありがとうございます!

+0

デバッグの? –

+0

'data'の値は' I/System.out:Intent {(have extras)} 'です。 'acct'だけが' null'です。 –

+0

'data'値を出力しないでください。アプリケーションをデバッグし、' super.onActivityResult'行にブレークポイントを置き、 'requestCode'、' resultCode'、 'data'の値を見つけてください。 –

答えて

1

getIntentを引数として渡していると思われます。Auth.GoogleSignInApi.getSignInResultFromIntent(getIntent());ここにgetIntent()がアクティビティインテントを返します。あなたはonActivityResultからdatagetIntent()を交換する必要があります。

Auth.GoogleSignInApi.getSignInResultFromIntent(data); 

としてもRESULT_OKを追加します。まず `data`がonActivityResult``でいくつかの値を持つ参照

if (requestCode == RC_SIGN_IN && resultCode == Activity.RESULT_OK) 
+0

ありがとうございますが、あなたが言ったように私が変わっても同じエラーが出ます。 –

+0

もう一度同じエラーが表示されます。 –

-1

ログインに失敗したようです。リクエストコードとともにresultCode == RESULT_OKをチェックしてみてください。

+0

あなたの答えをありがとうが、どうすればいいですか? –

+0

@Majeed Khanあなたは@Alex M.によって投稿されたエラーログを見ることができます。ここで 'result = -1'は' resultCode == RESULT_OK'を意味します。 –

関連する問題