簡體   English   中英

如何在android中使用json數組限制測驗中問題的顯示?

[英]How to limit the display of questions in the quiz using json array in android?

大家好,我正在開發一個測驗,其中存儲了50個問題,可以使用json數組進行訪問,並且我只想顯示10個問題,我的問題是這50個問題都在用戶每次玩游戲時都顯示出來。是否有可能限制如果我只想顯示10個問題? 在我提出了第10個問題后,將顯示分數等級。

你們能幫我這個忙嗎?

    List<JSONObject> question = null;

    private void loadQuestions() throws Exception {
        try {


            InputStream questions = this.getBaseContext().getResources()
                    .openRawResource(R.raw.questions);
            bReader = new BufferedReader(new InputStreamReader(questions));
            StringBuilder quesString = new StringBuilder();
            String aJsonLine = null;
            while ((aJsonLine = bReader.readLine()) != null) {
                quesString.append(aJsonLine);
            }

            Log.d(this.getClass().toString(), quesString.toString());
            JSONObject quesObj = new JSONObject(quesString.toString());
            quesList = quesObj.getJSONArray("Questions");
            Log.d(this.getClass().getName(),
                    "Num Questions " + quesList.length());

              question = new ArrayList<JSONObject>();
                 int n = Math.min(10, quesList.length());
                 for(int i = 0; i < n; i++) {
                     JSONObject questions1 = quesList.getJSONObject(i);
                     question.add(questions1);


                 }
        } catch (Exception e) {

        } finally {
            try {
                bReader.close();
            } catch (Exception e) {
                Log.e("", e.getMessage().toString(), e.getCause());
            }

        }

    }

    public static JSONArray getQuesList()throws JSONException{

          Random rnd = new Random();

            for (int i = quesList.length() - 1; i >= 0; i--)
            {
              int j = rnd.nextInt(i + 1);
              // Simple swap
              Object object = quesList.get(j);
              quesList.put(j, quesList.get(i));
              quesList.put(i, object);
            }
            return quesList;


    }
}


    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.startquiz);

    try {
        score = getIntent().getIntExtra("score",0);
        items = (TextView)findViewById(R.id.displayitems);
        question = (TextView) findViewById(R.id.displayquestion);
        answer1 = (RadioButton) findViewById(R.id.option1);
        answer2 = (RadioButton) findViewById(R.id.option2);
        answer3 = (RadioButton) findViewById(R.id.option3);
        answers = (RadioGroup) findViewById(R.id.QueGroup1);


        next = (Button) findViewById(R.id.selected);
        next.setOnClickListener(nextListener);

        selected = new int[Question1.getQuesList().length()];
        java.util.Arrays.fill(selected, -1);
        correctAns = new int[Question1.getQuesList().length()];
        java.util.Arrays.fill(correctAns, -1);

        this.showQuestion(0, review);



    } catch (Exception e) {
        Log.e("", e.getMessage().toString(), e.getCause());
    }

}

private void showQuestion(int qIndex, boolean review) {
    try {
        JSONObject aQues = Question1.getQuesList().getJSONObject(
                qIndex);
        String quesValue = aQues.getString("Question");
        if (correctAns[qIndex] == -1) {
            String correctAnsStr = aQues.getString("CorrectAnswer");
            correctAns[qIndex] = Integer.parseInt(correctAnsStr);
        }

        question.setText(quesValue.toCharArray(), 0, quesValue.length());
        answers.check(-1);
        answer1.setTextColor(Color.BLACK);
        answer2.setTextColor(Color.BLACK);
        answer3.setTextColor(Color.BLACK);
        JSONArray ansList = aQues.getJSONArray("Answers");
        String aAns = ansList.getJSONObject(0).getString("Answer");
        answer1.setText(aAns.toCharArray(), 0, aAns.length());
        aAns = ansList.getJSONObject(1).getString("Answer");
        answer2.setText(aAns.toCharArray(), 0, aAns.length());
        aAns = ansList.getJSONObject(2).getString("Answer");
        answer3.setText(aAns.toCharArray(), 0, aAns.length());
        Log.d("", selected[qIndex] + "");
        if (selected[qIndex] == 0)
            answers.check(R.id.option1);
        if (selected[qIndex] == 1)
            answers.check(R.id.option2);
        if (selected[qIndex] == 2)
            answers.check(R.id.option3);

        setText();
        if (quesIndex == (Question1.getQuesList().length() - 1))
            next.setEnabled(false);

        if (quesIndex < (Question1.getQuesList().length() - 1))
            next.setEnabled(true);

        if (review) {
            Log.d("review", selected[qIndex] + "" + correctAns[qIndex]);
            ;
            if (selected[qIndex] != correctAns[qIndex]) {
                if (selected[qIndex] == 0)
                    answer1.setTextColor(Color.RED);
                if (selected[qIndex] == 1)
                    answer2.setTextColor(Color.RED);
                if (selected[qIndex] == 2)
                    answer3.setTextColor(Color.RED);
            }
            if (correctAns[qIndex] == 0)
                answer1.setTextColor(Color.GREEN);
            if (correctAns[qIndex] == 1)
                answer2.setTextColor(Color.GREEN);
            if (correctAns[qIndex] == 2)
                answer3.setTextColor(Color.GREEN);
        }
    } catch (Exception e) {
        Log.e(this.getClass().toString(), e.getMessage(), e.getCause());
    }
}


private void setAnswer() {
    if (answer1.isChecked())
        selected[quesIndex] = 0;
    if (answer2.isChecked())
        selected[quesIndex] = 1;
    if (answer3.isChecked())
        selected[quesIndex] = 2;



    Log.d("", Arrays.toString(selected));
    Log.d("", Arrays.toString(correctAns));

}

private OnClickListener nextListener = new OnClickListener() {
    public void onClick(View v) {
        int i = correctAns.length;

        if (v == answers){
            if (correctAns[i] == selected[i])
                    {

                        score++;
                        Toast.makeText(getApplicationContext(), "Your answer is correct!", Toast.LENGTH_SHORT).show();
                    }else
                    {
                    Toast.makeText(getApplicationContext(), "Your answer is wrong..." + correctAns, Toast.LENGTH_SHORT).show();
                    }
        }


        quesIndex++;
        try {
            if (quesIndex >= Question1.getQuesList().length())
                quesIndex = Question1.getQuesList().length() - 1;
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        showQuestion(quesIndex, review);

    }
};
private void setText() throws JSONException {
    this.setTitle("Question " + (quesIndex + 1) + "  out of  "
            + Question1.getQuesList().length());
    items.setGravity(250);
}

public void reload() {
    setAnswer();



Intent intent = getIntent();
overridePendingTransition(0, 0);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();

overridePendingTransition(0, 0);
startActivity(intent);
}

根據我的理解,如果您下載整個json響應並僅閱讀相關內容,可能會更好。

理想情況下,如果您希望有10個問題,並且總共有50個問題,這意味着您將要使10個問題出現5次。 為此,您可以將其全部存儲在ArrayList中,然后在轉到下一個集合時將位置偏移10,然后抓住這些元素並顯示並重復此過程,直到退出問題。 否則,另一種方法是在每次使用后移除最上面的一組,然后每次都保持閱讀前10個。

請記住,在遇到新問題時, 必須使用正在讀取ArrayList的新元素來更新內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM