我正在尝试开发一个问答应用程序。 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()
。