我正在关注Android Studio
上的Firebase in a Weekend course (Android) from Udacity。从星期六开始的Lesson 36. Handling Cancelled Sign In上,显示了如何解决与您按下“后退按钮”相关的错误,并且应用程序不断显示登录屏幕。这是应该解决此问题的代码,onActivityResult
函数:
@Override // Added manually.
public void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == RC_SIGN_IN){
if(resultCode == RESULT_OK) {
Toast.makeText(this, "Signed in!", Toast.LENGTH_SHORT).show();
}
}else if(resultCode == RESULT_CANCELED){
Toast.makeText(this, "Sign in canceled", Toast.LENGTH_SHORT).show();
finish();
}
Toast.makeText(this, String.valueOf(requestCode), Toast.LENGTH_SHORT).show();
}
请注意,我在底部添加了一个Toaster
以显示requestCode
变量值:
Toast.makeText(this, String.valueOf(requestCode), Toast.LENGTH_SHORT).show();
requestCode
始终是1
(并且始终等于RC_SIGN_IN
常量值),即使在退出应用程序或首次启动应用程序时也是如此。
我尝试过的事情:擦除数据/缓存,重新安装应用,禁用/启用Don't keep activities
中的Developer options
。
这是完整的MainActivity.java
代码:
I've already asked on the course's forums,但还没有答案,针对类似问题的解决方案也无法解决我的问题。
我正在使用物理LG G3来测试应用程序。
更新:
resultCode
返回0
。不要与requestCode
混淆,它总是如上所述返回1
。
答案 0 :(得分:0)
好的,It Takes Guts And Humility To Admit That You Are Wrong,但是当人们探索一种新技术时,它经常发生,并且是学习曲线的一部分。问题是我的else if
声明。它应该嵌套在第二个if
语句中:
它说:
if(requestCode == RC_SIGN_IN){
if(resultCode == RESULT_OK) {
Toast.makeText(this, "Signed in!", Toast.LENGTH_SHORT).show();
}
}else if(resultCode == RESULT_CANCELED){
Toast.makeText(this, "Sign in canceled", Toast.LENGTH_SHORT).show();
finish();
}
它应该说:
if(requestCode == RC_SIGN_IN){
if(resultCode == RESULT_OK) {
Toast.makeText(this, "Signed in!", Toast.LENGTH_SHORT).show();
}else if(resultCode == RESULT_CANCELED){
Toast.makeText(this, "Sign in canceled", Toast.LENGTH_SHORT).show();
finish();
}
}
现在后退按钮循环消失了。