Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从firestore数据库洗牌文档/字段_Android_Firebase_Google Cloud Firestore - Fatal编程技术网

Android 从firestore数据库洗牌文档/字段

Android 从firestore数据库洗牌文档/字段,android,firebase,google-cloud-firestore,Android,Firebase,Google Cloud Firestore,我正在尝试为我正在开发的测验程序找到一个解决方案。 1.一个问题集合下的10个文档中有10个问题。 2.每个问题都有1个正确答案和5个错误选项 这就是我到目前为止所做的: 1.我有一个线性布局的列表视图(除了显示问题和选项的文本视图: <ListView android:id="@+id/queslist" android:layout_width="wrap_content" android:layout_height="0dp"

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

这就是我到目前为止所做的: 1.我有一个线性布局的列表视图(除了显示问题和选项的文本视图:

    <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代码中,我有一个适配器,它填充了问题集合中的所有文档,如下所示

    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();
                }
            });
ArrayAdapter=new ArrayAdapter(getApplicationContext(),android.R.layout.simple\u list\u item\u 1,问题);
quesList.setAdapter(适配器);
章节参考文件(章节库)
.集合(levelBase)
.文件(“摘要”)
.收集(“问题”)
.get()
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
对于(QueryDocumentSnapshot documentSnapshot:task.getResult()){
quesFull=documentSnapshot.getString(“ques”);
问题。添加(问题完整);
祝酒词(“问题”+问题);
}
adapter.notifyDataSetChanged();
}
});
到目前为止,一切都很好。现在我想实现这一目标:

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

有人能帮我吗


提前感谢。

对于那些想为类似问题寻找答案的人,以下是解决问题的方法。 但是,如果有人有更好的解决方案,请在此分享

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

然后,我调用了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(索引),我得到了问题的无序顺序

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));

}
private void options shuffle(){
随机=新随机();
List givenList=Lists.newArrayList(“0”、“1”、“2”、“3”、“4”);
int numopts=3;
选项。清除();
for(int i=0;i