我正在尝试开发一个问答应用程序。 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或者因为内部类而无法定义标志。你有什么建议吗?
答案 0 :(得分:0)
一种选择可能是在ArrayList
方法的开头设置空showUnansweredQuestion()
。然后,您可以将相关的questionId添加到ArrayList,而不是在内部updateUI()
中调用onDataChange()
。当您完成对问题的迭代(因此您有所有未答复的完整列表)时,您可以在ArrayList中的第一个上调用updateUI()
。