从Firestore数据库改组文档/字段

时间:2019-11-22 15:11:32

标签: android firebase google-cloud-firestore

我正在尝试为我正在开发的测验程序寻求解决方案。 1.一个问题集合下的10个文档中有10个问题。 2.这些问题中的每一个都有1个正确答案和5个错误选项。

这是我到目前为止所做的: 1.我在线性布局中有一个ListView(除了Textviews之外,它还显示问题和选项:

    <ListView
        android:id="@+id/queslist"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:visibility="invisible">

    </ListView>

在Java代码中,我有一个适配器,该适配器中装有这样的Questions Collection中的所有文档。

    ArrayAdapter adapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_list_item_1, questions);
    quesList.setAdapter(adapter);
    chapterRef.document(chapterBase)
            .collection(levelBase)
            .document("Summary")
            .collection("QUESTIONS")
            .get()
            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    for(QueryDocumentSnapshot documentSnapshot : task.getResult()){
                        quesFull = documentSnapshot.getString("ques");
                        questions.add(quesFull);
                        Toast("questions "+questions);
                    }
                    adapter.notifyDataSetChanged();
                }
            });

到目前为止,一切都很好。现在我想实现这一目标:

当用户选择测验时, 1.所有10个问题都进行了混排,因此对于另一个用户,它们的顺序永远不会相同。 2.其次,我希望从5个错误选项中随机选择3个错误选项。 这使选项总共为4(包括正确答案)。 3.最后,我希望再次调整这4个选项,以便每次尝试的顺序都不同。

有人可以帮我吗?

先谢谢了。

1 个答案:

答案 0 :(得分:0)

对于那些正在寻找类似问题答案的人来说,这是解决该问题的方法。 但是,如果有人有更好的解决方案,请在此处共享。

我首先创建了一个列表字符串=问题,然后将数字添加到其中。当然,这可以进一步改进。

然后,我将方法称为QuestionShuffle。

private void QuestionShuffle() {

    questions.add("1");
    questions.add("2");
    questions.add("3");
    questions.add("4");
    questions.add("5");
    questions.add("6");
    questions.add("7");
    questions.add("8");
    questions.add("9");
    questions.add("10");

    Collections.shuffle(questions);
}

然后,使用.get(index),我得到了问题的顺序。

String docnumber = questions.get(counter);

为了重新整理选项,使用了以下代码。

private void OptionShuffle(){
    Random random = new Random();
    List<String> givenList = Lists.newArrayList("0", "1", "2", "3", "4");
    int numOfopts = 3;
    options.clear();

  for(int i = 0; i < numOfopts; i++){

        int randomIndex = random.nextInt(givenList.size());
        String selection = givenList.get(randomIndex);
        options.add(optList.get(Integer.parseInt(selection)));
        givenList.remove(randomIndex);
    }

    optionA.setText(ansFull);
    options.add(ansFull);
    Collections.shuffle(options);
    optionA.setText(options.get(0));
    optionB.setText(options.get(1));
    optionC.setText(options.get(2));
    optionD.setText(options.get(3));

}