2016-04-02 45 views
0

我试图在Android API中使用authData.getProviderData().get("isTemporaryPassword") 方法来检查密码是否是临时密码。虽然该方法返回字面上真正”,而在日志打印,如果我使用的方法来重定向到一个新的活动检查,如果情况像检查密码是否为Firebase Android上的临时密码

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“

我错过了什么?

回答

3

方法#getProviderData()返回Map<String, Object>。这就是为什么当你#get()的价值,这是一个Object。既然你知道这是一个布尔值,你可以将它转换为Booleanif条件下使用:

if ((Boolean)authData.getProviderData().get("isTemporaryPassword")) { … 

你不能把一个Objectif条件,只有boolean内。您可以放一个Boolean,但因为自动装箱会小心并转换为boolean

这也解释了为什么测试.equals(true)的作品。当您这样做时,方法.equals将执行转换以测试返回的对象中存储的值是否等于true

+1

很好的解释道格拉斯! –

1

该解决方案为我

if(authData.getProviderData().get("isTemporaryPassword").equals(true))

由于if()本身检查的真实情况,我不明白为什么等于真正解决了我的问题。我不认为这是一个适当的解决方案,但它的工作。

+0

查看我的回答了解此行为 –

+1

感谢Douglas的解释。我知道我错过了一些东西。 – Vijay