如何从Firebase到测验应用程序生成随机问题?

时间:2019-07-14 13:45:47

标签: java android

我正在尝试创建我的第一个android应用。我创建了与Firebase连接的测验。效果很好,但我只需要随机显示10个问题-总共30个问题。另外,我不想重复这个问题。如何生成随机问题?这是我编写的代码。谢谢

private void updateQuestion() {
    mQuestionRef = new Firebase("https://ab-quiz.firebaseio.com/"+ mQuestionNumber +"/biq");
    mQuestionRef.addValueEventListener(new com.firebase.client.ValueEventListener() {
        @Override
        public void onDataChange(com.firebase.client.DataSnapshot dataSnapshot) {
            String question = dataSnapshot.getValue(String.class);
            mQuestion.setText(question);


        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });
            if(mQuestionNumber > 10){

                quitFunction();

            }
            else {
                mQuestionNumber++;
            }
}

2 个答案:

答案 0 :(得分:0)

尝试以下步骤:

  1. 在列表中添加所有问题。
  2. 维护从0开始显示的问题数量。
  3. 使用下面的代码获取列表大小内的随机数。

    Random rand = new Random();    
    int n = rand.nextInt(list.size);
    
  4. 使用list.get(n)从列表中获取问题。

  5. 显示问题后,使用list.remove(n)从列表中删除项目。

  6. 增加您在第2步中显示的问题数量。

  7. 达到显示问题的极限后,开始另一个过程。

希望这会有所帮助。

谢谢。

答案 1 :(得分:0)

这是一个可能的答案-

首先,您应该创建一个QuizQuestion.java,您可以在其中设置一个questionId和questionText,如下所示-

public class QuizQuestion {

    private int questionId;
    private String questionText;

    public ChatMessage(int questionId, String questionText, ) {
        this.messageText = messageText;
        this.messageUser = messageUser;
    }

    public QuizQuestion(){

    }

    public int getQuestionId() {
        return questionId;
    }

    public void setQuestionId(int questionId) {
        this.questionId = questionId;
    }

    public String getQuestionText() {
        return questionText;
    }

    public void setQuestionText(String questionText) {
        this.questionText = questionText;
    }
}

然后,在MainActivity.java中调用它-

public class MainActivity extends AppCompatActivity {

    private TextView questionView;
    private Button nextButton;

    private int questionCount = 0;

    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 

        questionView = findViewById(R.id.question_view);
        nextButton = findViewById(R.id.next_button);

        displayQuestion();

    nextButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            displayQuestion();
        }
    });
}

public void displayQuestion() {

    // This methods queries your database for a question with the Id of an random integer from 1 to 30 and sets the text of the TextView to the question text

    final Query questionToDisplay = FirebaseDatabase.getInstance()
                .getReference().child("questions")
                .orderByChild("questionId")
                .equalTo(new Random().nextInt(30)); // Generate a random integer from 1 to 30

        questionToDisplay.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot question : dataSnapshot.getChildren()) {
                    if (questionCount is < 10) {
                        questionView.setText(question.getValue(QuizQuestion.class).getQuestionText);
                        questionCount += 1;

                    } else if (questionCount >= 10) {
                         finish(); // Close Activity
                    }
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Log.e("ItemDetail", "onCancelled", databaseError.toException());
                }
            });
}

如果您要添加问题,只需在需要的地方添加这些行-

FirebaseDatabase.getInstance().getReference().child("questions").push
.setvalue(new QuizQuestion(1, /* Question Id */"What sound does a fox make?" /* Question Text */));

希望这会有所帮助!

编辑:

这是假定的数据库结构-

--quiz-app // Root node
    --questions
        --Lxjcksduso12m42i4m
            --questionId: "1"
            --questionText: "What sound does a fox make?"
        --Lxjcksduso12m42i4m
            --questionId: "2"
            --questionText: "What is the capital of Italy?"
        --Lxjcksduso12m42i4m
            --questionId: "3"
            --questionText: "When will the polar ice caps melt completely?"