我正在尝试开发一个问答应用程序。 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,也无法定义标志。你有什么建议吗?

最佳答案

一种选择是在ArrayList方法的开始处制作一个空的showUnansweredQuestion()。然后,您可以在ArrayList中添加相关的questionId,而不是在内部的updateUI()中调用onDataChange()。完成对问题的遍历后(因此,您可以获得所有未回答的问题的完整列表),可以在ArrayList中的第一个问题上调用updateUI()

09-04 11:16