如何使用Android显示Google SignInResult对象的名称和电子邮件?
我已经创建了一个应用程序,其中a添加了Firebase和Google身份验证如何使用Android显示Google SignInResult对象的名称和电子邮件?,android,firebase,firebase-authentication,google-authentication,Android,Firebase,Firebase Authentication,Google Authentication,我已经创建了一个应用程序,其中a添加了Firebase和Google身份验证 authStateListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = auth.getCurrentUser();
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);
}
}
};
当我单击谷歌登录
按钮时,我已正确登录到我的帐户。但是当试图显示此人的姓名和电子邮件时,一旦登录,我就会收到一个错误。我在我的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异常:main java.lang.RuntimeException:未能将结果ResultInfo{who=null,request=111,result=-1,data=Intent{(has extras)}}传递到活动。。。。。java.lang.NullPointerException
。
提前谢谢 感觉登录不成功。尝试检查resultCode==RESULT\u OK以及请求代码。错误似乎是将
getIntent
作为参数传递给Auth.GoogleSignInApi.getSignInResultFromIntent(getIntent())
heregetIntent()
返回活动意图。您应该将getIntent()
替换为来自onActivityResult
的data
:
Auth.GoogleSignInApi.getSignInResultFromIntent(data);
同时添加RESULT\u OK
,如下所示:
if (requestCode == RC_SIGN_IN && resultCode == Activity.RESULT_OK)
谢谢你的回答,但我该怎么做呢?@Majeed Khan你可以看到@Alex M发布的错误日志。其中
result=-1
,意思是resultCode==result\u OK
这已经是真的了。谢谢,但我得到了同样的错误,即使我像你说的那样改变。在调试时首先看到数据在onActivityResult
中有一些值?数据有一个值:i/System.out:Intent{(has extras)}
。只有acct
是null
。不要打印data
值。调试你的应用程序并在super.onActivityResult
行上放置一个断点,找出requestCode
、resultCode
和数据的值。data
和requestCode
都正常。resultCode
的值为-1
。发生了什么事?resultCode
=-1表示结果正常。如果数据
不为空,您可以查看数据的调试值。获取额外信息
,或者在调试时尝试评估数据
的所有建议。您肯定会在数据
中得到一些东西。