我有一把钥匙' newUser'在我的firebase数据库中,可以将其设置为“真实”'或者' 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"。
然而,结果是用户始终被带到仪表板,即使他们是新用户。如果他们是newUser并登录,则在单击后退按钮时,用户将导航到预期的欢迎新用户活动。 除此之外,有时会启动几个活动实例。
我只是想知道是否有人能解释为什么会这样,我没看到什么? 如果需要明确,请说明,我会尽力更新帖子。
非常感谢提前。
答案 0 :(得分:0)
从实验和进一步阅读:
为每个更改的值调用addValueEvent侦听器,因此在将singleSnapShot设置为false时,这会影响更改值,从而再次调用侦听器。相反,正确的方法是为单个值事件使用Listener。 当交换此方法时,解决方案按预期工作。