【问题标题】:Welcome User screen firebase integration - unexpected results欢迎用户屏幕 Firebase 集成 - 意外结果
【发布时间】: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


【解决方案1】:

来自实验和进一步阅读:

addValueEvent 监听器会在每个值发生变化时被调用,因此当将 singleSnapShot 设置为 false 时,这会影响值的更改,因此会再次调用监听器。相反,正确的方法是为单个值事件使用监听器。 换成此方法后,解决方案按预期工作。

【讨论】:

    猜你喜欢
    • 2020-05-19
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 2015-08-18
    • 1970-01-01
    • 2016-08-05
    • 2017-05-06
    相关资源
    最近更新 更多