比较不同的参考文献(Firebase)

时间:2018-01-13 09:37:16

标签: java android firebase firebase-realtime-database

我正在尝试开发一个问答应用程序。 Firebase数据库如下所示:

-users
    -userId
        -answers
            -questionId : answer
            -questionId : answer

-questions
    -questionId
    -questionId
    -questionId
    -questionId

如果用户回答问题,则根据userId将该问题存储在答案部分下。我的问题是找到用户未回答的问题并将其显示在活动上。为此,首先,我从questions列表中选择一个问题,然后检查它是否存在于answers列表中。这是方法:

public void showUnansweredQuestion()
{
    questionsRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot question: dataSnapshot.getChildren())
            {
                final String questionId = question.getKey().toString();

                usersRef.child(user.getUid())
                        .child("answers")
                        .addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {
                                if(!dataSnapshot.hasChild(questionId))
                                {
                                    updateUI(questionId);
                                }
                            }

                            @Override
                            public void onCancelled(DatabaseError databaseError) {}
                        });
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}
    });
}

然而,这个方法总是显示最后一个未回答的问题,而我想看到第一个问题。问题可能是for循环,我不能写break in if或者因为内部类而无法定义标志。你有什么建议吗?

1 个答案:

答案 0 :(得分:0)

一种选择可能是在ArrayList方法的开头设置空showUnansweredQuestion()。然后,您可以将相关的questionId添加到ArrayList,而不是在内部updateUI()中调用onDataChange()。当您完成对问题的迭代(因此您有所有未答复的完整列表)时,您可以在ArrayList中的第一个上调用updateUI()