【发布时间】:2018-08-01 15:40:22
【问题描述】:
我的 firebase 数据库中有一个键“newUser”,可以设置为“true”或“false”,如下所示: firebase database structure click here for screenshot
我在 LoginActivity 类中引用了数据库,单击登录按钮后,将调用 userLogin 方法,在此方法中我执行以下操作:
mDatabase.orderByChild("email").equalTo(email)
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot singleSnapshot: dataSnapshot.getChildren()){
String newUser = singleSnapshot.getValue(User.class).newUser;
if(newUser.equals("true")){
Log.d("Yes!", "this is a new user");
startnewActivity(singleSnapshot);
}else {
Log.d("No!", "this is an old user");
startnewActivity(singleSnapshot);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
请注意,equalTo(email) ... email 是一个局部变量,它在用户输入电子邮件的文本字段中获取文本。 startnewActivity 方法定义如下,根据用户是否是新用户来初始化活动:
private void startnewActivity(DataSnapshot singleSnapshot) {
String s = singleSnapshot.getValue(User.class).newUser;
if (s.equals("true")) {
Intent i = new Intent(LoginActivity.this, AudiometryNewUser.class);
singleSnapshot.getRef().child("newUser").setValue("false");
Log.d("iterated!?", "");
startActivity(i);
return;
}
else if(s.equals("false")){
Intent i = new Intent(LoginActivity.this, MainDashboard.class);
Log.d("iterated", "");
startActivity(i);
}
}
我的意图是当用户是newUser = true时,他们将被带到欢迎屏幕AudiometryNewUser,并且对于newUser值采用“false”。
然而,结果是用户总是被带到仪表板,即使他们是新用户。如果他们是新用户并已登录,则单击后退按钮后,用户将导航到预期的欢迎新用户活动。 除此之外,有时还会启动多个活动实例。
我只是想知道是否有人可以解释为什么会发生这种情况,我没有看到什么? 如果需要澄清,请说出来,我会尽力更新帖子。
提前非常感谢。
【问题讨论】:
-
我有,我认为现在是一个可行的解决方案... 为 addListenerForSingleValueEvent 更改了 ValueEventListener 之后,我还没有通过进一步的测试来确认这一点。如果有人可以进一步详细说明为什么会这样,将不胜感激
标签: android firebase user-interface android-activity firebase-realtime-database