2013-02-19 1 views
0

Я разрабатываю викторину, в которой у меня есть 50 вопросов, и я хочу, чтобы она отображалась случайным образом в викторине каждый раз, когда пользователь будет играть. Как я могу это сделать? возможно ли рандомизировать вопрос с помощью json? пожалуйста, помогите мне .. я действительно ценю помощь ур.thanks.как случайные вопросы в викторине с использованием массива JSON в android?

public class Question1 extends Activity { 

Intent menu = null; 
BufferedReader bReader = null; 
static JSONArray quesList = null; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.question10); 

    Thread thread = new Thread() { 
     public void run() { 
      try { 
       Thread.sleep(1 * 1000); 
       finish(); 
       loadQuestions(); 
       Intent intent = new Intent(Question1.this, 
         Question2.class); 
       Question1.this.startActivity(intent); 
      } catch (Exception e) { 
      } 
     } 
    }; 
    thread.start(); 

} 

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()); 
    } catch (Exception e) { 

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

    } 

} 

public static JSONArray getQuesList(){ 

    return quesList; 



} 

}

public class Question2 extends Activity { 
/** Called when the activity is first created. */ 


TextView question, items = null; 
RadioButton answer1 = null; 
RadioButton answer2 = null; 
RadioButton answer3 = null; 
RadioGroup answers = null; 
int selectedAnswer = -1; 
int quesIndex = 0; 
int numEvents = 0; 
int selected[] = null; 
int correctAns[] = null; 
boolean review = false; 
Button next = null; 
int score; 

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


    try { 

     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) { 
     setAnswer(); 

     for(int i=0; i<correctAns.length; i++){ 

      if ((correctAns[i] != -1) || (correctAns[i] == selected[i])) 
      { 
       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...", Toast.LENGTH_SHORT).show(); 
     } 

     quesIndex++; 
     if (quesIndex >= Question1.getQuesList().length()) 
      //quesIndex = Question1.getQuesList().length() - 1; 

     showQuestion(quesIndex, review); 
     } 

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

public void reload() { 

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

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

}

+0

но буквально я предлагаю вам, что вы должны использовать Colection.shuffle() функция, а не Math.random() bcz некоторое время повторяется. Его личное мнение .... – duggu

+0

Случайное имеет свое ограничение, оно будет повторяться после звонков 2^48. (он использует 48-битное семя). Но это не значит, что он не является достаточно случайным. – Triode

+0

@ rajesh.adhi, можно ли ограничить отображение вопроса? в котором у меня есть 50 вопросов, и тогда я хочу только 10 вопросов для отображения – user2079544

ответ

0

Использование ((int) Math.random() * <size of your array>) для генерации случайного индекса для вашего массива вопросов

+0

Большое спасибо .... это такая большая помощь !, но где я могу поместить это ((int) Math.random() * <размер вашего массива>) @pandre – user2079544

+0

Я думаю, если вы не знаете, что, вероятно, код, который вы вставили, не принадлежит вам, и вы просто хотите, чтобы мы его кодировали – pandre