2013-02-22 2 views
-4

im разработка теста, в котором у меня есть 10 вопросов. и это случайно отображается моя проблема, после этого мой 10-й вопрос, я не знаю, как навестить его на мой класс оценки, который должен быть отображением игрока недавно сыграл викторину.Как уладить другой класс, используя json array

это где вопросы загружен:

public class Question1 extends Activity { 



Intent menu = null; 
BufferedReader bReader = null; 
static JSONArray quesList = null; 
static int index = 50; 



/** 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(); 

} 

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


} 

это где событие вопросы:

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 = 0; 


@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 == next){ 
      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); 
} 
+0

Так же, как FYI «Что не так с моим кодом» или «Исправить мой код» - это просто не продуктивный вопрос о SO. –

+1

В чем проблема? Кроме того, я не понимаю поток бизнеса, который у вас происходит. Вы можете загрузить их из «AsyncTask», затем запустите свой «Intent» после его завершения. Кроме того, 1 * 1000 - 1000;) – codeMagic

+0

Кроме того, если вы объясните свой вопрос немного лучше, и в чем проблема, включая сообщения об ошибках и/или logcat, вы можете получить удаленные слухи, потому что вы предоставили соответствующий код и показали усилие , Лично я бы не стал так стремиться, но это мое мнение – codeMagic

ответ

0

Я не могу понять, почему вы пытаетесь запустить отдельный поток в Question1.onCreate(). Если вы хотите загрузить вопросы в фоновом режиме, используйте AsyncTask. Лично я предпочитаю использовать IntentService для выполнения фоновых задач, в которых вы хотите сохранить результаты. IntentService особенно полезен для декодирования JSON.

Вы не говорите, что происходит сейчас с вашим приложением, но я предполагаю, что Activity Question2 никогда не начинается. Я не уверен, но я подозреваю, что это потому, что вы пытаетесь запустить Activity из фонового потока. Вы можете использовать runOnUiThread(), чтобы исправить это, но было бы лучше загрузить вопросы в IntentService, отправить локальную BroadcastMessage в свою активность, когда загрузка будет завершена, а затем отобразить результаты. Кроме того, я разбирал JSON в базе данных или поставщике контента.

Смежные вопросы