【发布时间】:2020-01-08 17:13:13
【问题描述】:
我正在按照this 的方法获取 3 个随机文档,这些文档存储在 Firestore 的集合中。
我使用第一种方法从 8 个随机类别中选择 3 个,效果很好。我的应用程序的下一步是用户单击 3 个类别之一,然后它应该从所选类别中获得 3 个随机问题,并将其显示在“类别选择”片段之后的片段中。我注意到我不能使用第一种方法,因为这最终会导致大量阅读,因为最终每个类别都会有至少 500 个问题。
显然有一种更有效的方法来获取随机问题(第二种方法),但我很难理解它。它说我应该创建另一个文档作为一个数组,它可以在里面保存所有问题 id,但是我如何将所有问题 id 添加到这个数组中?我不知道代码最终会是什么样子。
当我正确理解第二种方法时,我必须将文档中问题的所有 id 存储为数组,但是如何将所有 id 放入数组中?除了使用云功能还有其他方法吗?所以我需要的是上面链接中描述的第二种方法的代码实现或如何实现该方法的示例。
非常感谢任何帮助!
这是我的方法代码:
...
questionRef.document(tvCat1).collection(tvCat1).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
List<Questions> questionsList = new ArrayList<>();
for (DocumentSnapshot document : task.getResult()) {
Questions question = document.toObject(Questions.class);
questionsList.add(question);
}
int questionListSize = questionsList.size();
List<Questions> randomQuestionsList = new ArrayList<>();
for (int i = 0; i < questionListSize; i++) {
Questions randomQuestions = questionsList.get(new Random().nextInt(questionListSize));
if (!randomQuestionsList.contains(randomQuestions)) {
randomQuestionsList.add(randomQuestions);
if (randomQuestionsList.size() == 3) {
Collections.shuffle(questionsList);
question1 = questionsList.get(0).getQuestion();
question2 = questionsList.get(1).getQuestion();
question3 = questionsList.get(2).getQuestion();
answer1 = questionsList.get(0).getAnswer();
answer2 = questionsList.get(1).getAnswer();
answer3 = questionsList.get(2).getAnswer();
...
【问题讨论】:
标签: java android firebase google-cloud-firestore