2012-12-04 45 views
0

Results.java中所有註釋掉的代碼都是我嘗試過的所有事情都沒有成功。我無法通過意圖傳遞整數到另一個活動。通過intent傳遞一個整數到活動 - Java(Android)

以下方法在我的QuestionView.java類中。

public void endQuiz() { 
    Intent intent = new Intent(QuestionView.this, Results.class); 
    intent.putExtra("correctAnswers", correctAnswers); 
    intent.putExtra("wrongAnswers", wrongAnswers); 
    startActivity(intent); 
} 

Results.java

public class Results extends Activity { 

    QuestionView qv = new QuestionView(); 
    ArrayList<Question> queryList = qv.getQueries(); 

// int cAswers = this.getIntent().getExtras("correctAnswers"); 
    int cAnswers = getIntent().getIntExtra("correctAnswers", -1); 
    int wAnswers = getIntent().getIntExtra("wrongAnswers", -1); 

/* Bundle b = this.getIntent().getExtras(); 
    int cAnswers = b.getInt("correctAnswers"); 
    int wAnswers = b.getInt("wrongAnswers");*/ 

// int cAnswer = getIntent().getIntExtra("correctAnswer"); 


// if(getIntent().getIntExtra("correctAnswers") != null) { 
//  int cAnswers = b.getInt("correctAnswers"); 
// } 

// ArrayList<Question> questions = extras.getSparseParcelableArray("queries"); 

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



/*  Bundle extras = getIntent().getExtras(); 
     int cAnswers = extras.getInt("correctAnswers"); 
     int wAnswers = extras.getInt("wrongAnswers");*/ 


     Button homeBtn = (Button)findViewById(R.id.homeBtn); 
     Button highscoresBtn = (Button)findViewById(R.id.highscoresBtn); 

     homeBtn.setOnClickListener(new OnClickListener() { 
      public void onClick(View arg0) { 
       Intent intent1 = new Intent(Results.this, MainMenu.class); 
       startActivity(intent1); 
      } 
     }); 

     highscoresBtn.setOnClickListener(new OnClickListener() { 
      public void onClick(View arg0) { 
       Intent intent2 = new Intent(Results.this, Highscores.class); 
       startActivity(intent2); 
      } 
     }); 

     showResults(); 
    } 

    public void showResults() { 

     ArrayList<TextView> tList = new ArrayList<TextView>(10); 

     TextView header = (TextView)findViewById(R.id.header); 
     TextView q1 = (TextView)findViewById(R.id.q1); 
     TextView q2 = (TextView)findViewById(R.id.q2); 
     TextView q3 = (TextView)findViewById(R.id.q3); 
     TextView q4 = (TextView)findViewById(R.id.q4); 
     TextView q5 = (TextView)findViewById(R.id.q5); 
     TextView q6 = (TextView)findViewById(R.id.q6); 
     TextView q7 = (TextView)findViewById(R.id.q7); 
     TextView q8 = (TextView)findViewById(R.id.q8); 
     TextView q9 = (TextView)findViewById(R.id.q9); 
     TextView q10 = (TextView)findViewById(R.id.q10); 

     tList.add(q1); 
     tList.add(q2); 
     tList.add(q3); 
     tList.add(q4); 
     tList.add(q5); 
     tList.add(q6); 
     tList.add(q7); 
     tList.add(q8); 
     tList.add(q9); 
     tList.add(q10); 

     tList.get(0).setText(queryList.get(0).getQuery()); 

     if(queryList.get(0).getCorrectness() == true) { 
      tList.get(1).setText("Changed to true"); 
     } else { 
      tList.get(1).setText("DID NOT Change to true"); 
     } 

     tList.get(2).setText(Integer.toString(cAnswers)); 
     tList.get(3).setText(Integer.toString(wAnswers)); 

/*  for(int i = 0; i < 10; i++) { 
      tList.get(i).setText(queryList.get(i).getQuery()); 
      if(queryList.get(i).getCorrectness() == true) { 
       tList.get(i).setTextColor(Color.GREEN); 
      } else { 
       tList.get(i).setTextColor(Color.RED); 
      } 
     }*/ 
    } 
} 

logcat的

12-04 11:52:33.342: E/AndroidRuntime(1128): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.test/com.example.test.Results}: java.lang.NullPointerException 
12-04 11:52:33.342: E/AndroidRuntime(1128):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1983) 
12-04 11:52:33.342: E/AndroidRuntime(1128):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
12-04 11:52:33.342: E/AndroidRuntime(1128):  at android.app.ActivityThread.access$600(ActivityThread.java:130) 
12-04 11:52:33.342: E/AndroidRuntime(1128):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
12-04 11:52:33.342: E/AndroidRuntime(1128):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-04 11:52:33.342: E/AndroidRuntime(1128):  at android.os.Looper.loop(Looper.java:137) 
12-04 11:52:33.342: E/AndroidRuntime(1128):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
12-04 11:52:33.342: E/AndroidRuntime(1128):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-04 11:52:33.342: E/AndroidRuntime(1128):  at java.lang.reflect.Method.invoke(Method.java:511) 
12-04 11:52:33.342: E/AndroidRuntime(1128):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
12-04 11:52:33.342: E/AndroidRuntime(1128):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
12-04 11:52:33.342: E/AndroidRuntime(1128):  at dalvik.system.NativeStart.main(Native Method) 
12-04 11:52:33.342: E/AndroidRuntime(1128): Caused by: java.lang.NullPointerException 
12-04 11:52:33.342: E/AndroidRuntime(1128):  at com.example.test.Results.<init>(Results.java:21) 
12-04 11:52:33.342: E/AndroidRuntime(1128):  at java.lang.Class.newInstanceImpl(Native Method) 
12-04 11:52:33.342: E/AndroidRuntime(1128):  at java.lang.Class.newInstance(Class.java:1319) 
12-04 11:52:33.342: E/AndroidRuntime(1128):  at android.app.Instrumentation.newActivity(Instrumentation.java:1053) 
12-04 11:52:33.342: E/AndroidRuntime(1128):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974) 
12-04 11:52:33.342: E/AndroidRuntime(1128):  ... 11 more 

回答

3

你試圖Results.place的onCreate方法之前,從QuestionView讓你的意圖在的onCreate更改接收結果代碼的結果活動爲:

public class Results extends Activity { 
    int cAnswers=0; 
    int wAnswers=0; 
    QuestionView qv = new QuestionView(); 
    ArrayList<Question> queryList = qv.getQueries(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.resultsmain); 
     cAnswers = getIntent().getIntExtra("correctAnswers", -1); 
     wAnswers = getIntent().getIntExtra("wrongAnswers", -1); 
     //your code here... 

注意:我已經告訴過你不要創建一個Activity實例來訪問它的方法或字段。使用IntentApplication class用於在應用程序組件之間共享數據,例如活動

+0

我這樣做了一次,但在結果類中的方法showResults()中無法訪問cAnswers和wAnswers。 – Matt

+0

看到我的編輯答案讓兩個級別字段 –

+0

完美!謝謝!所以你說我不應該創造活動的實例?例如,在Results類中我有'QuestionView qv = new QuestionView();'。 – Matt

相關問題