我正在使用Parse和他们的电子邮件身份验证服务。未单击发送到其电子邮件ID的链接的用户将在emailVerified列下具有false值。所以,我编写了一个代码来检查这个值是真还是假。
ParseUser currentUser = ParseUser.getCurrentUser();
Boolean authenticationValue = currentUser.getBoolean("emailVerified");
Log.i(TAG, "The Boolean Value is :"+authenticationValue);
Log.i(TAG, "The current user is :" + currentUser.getUsername());
if(currentUser != null)
{
if (authenticationValue) {
Log.i(TAG, currentUser.getUsername());
}
else {
Intent intent = new Intent(MainActivity.this, NotAuthenticated.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
}
else
{
takeToLogin();
}
我在点击该链接之前检查了该值,并且值为false,如预期的那样。但是,在我点击该链接后,我仍然得到错误的值。
我已经检查了Parse上的仪表板,它说这是真的。那么,这段代码中的错误是什么。
答案 0 :(得分:0)
再次:尝试使用包裹boolean
的{{1}} instean,如下所示:
Boolean
我很确定你会得到一份NPE。如果我是对的(你必须检查它),那么这里唯一需要考虑的是你为什么要获得NPE。实际上,隐藏的NPE是boolean authenticationValue = Boolean.valueOf(currentUser.getString("emailVerified").toString());
Boolean
为authenticationValue
的原因。我更喜欢你认为:)
这是提示:
false
如果该日志输出null,则currentUser中没有值“emailVerified”。尝试记录整个currentUser对象,也许它有toString(),因此你将能够看到它包含的数据:
Log.i(TAG, "The emailVerified Value is: "+currentUser.getString("emailVerified"));
您是否还可以记录可用的密钥:
Log.i(TAG, "The currentUser is: "+String.valueOf(currentUser));
答案 1 :(得分:0)
我搜索了一会儿后得到了解决方案。该应用程序使用本地数据库,而不是每次从Parse获取它。因此,我们必须强制应用程序获取更新的数据。 因此,可以使用以下方法完成。
ParseUser currentUser = ParseUser.getCurrentUser();
currentUser.fetchInBackground(new GetCallback<ParseObject>() {
@Override
public void done(ParseObject parseObject, com.parse.ParseException e) {
if (e == null) {
boolean value = parseObject.getBoolean("emailVerified");
Log.i(TAG, "The Value is :"+value);
} else {
// Failure!
}
}
});