我正在尝试使用authData.getProviderData().get("isTemporaryPassword")
Android API中的方法,用于检查密码是否为临时密码。虽然该方法在日志中打印时返回字面“ true ”,但如果我使用该方法重定向到新的Activity,则检查if条件,如
if (authData.getProviderData().get("isTemporaryPassword")){
Intent intent = new Intent(MainActivity.this,PasswordReset.class);
Bundle bundle = new Bundle();
intent.putExtra("email",email.getText().toString());
intent.putExtra("password",password.getText().toString());
startActivity(intent);
它说 “所需类型不兼容:找不到布尔值:java.Lang.Object”
我错过了什么吗?
答案 0 :(得分:3)
方法#getProviderData()
返回Map<String, Object>
。这就是为什么当你#get()
价值时,它就是Object
。由于您知道这是一个布尔值,因此您可以将其强制转换为Boolean
以在if
条件中使用:
if ((Boolean)authData.getProviderData().get("isTemporaryPassword")) { …
您无法将Object
置于if
条件中,只能boolean
。您可以设置Boolean
,因为自动装箱会照顾并转换为boolean
。
这也解释了为什么.equals(true)
的测试有效。执行此操作时,方法.equals
将执行转换以测试返回的此对象中存储的值是否等于true
。
答案 1 :(得分:1)
此解决方案适合我
if(authData.getProviderData().get("isTemporaryPassword").equals(true))
由于if()
本身会检查真实情况,我不明白为什么等于 true 解决了我的问题。我不认为这是一个合适的解决方案,但它正在发挥作用。