2012-12-11 83 views
0

我試圖創建一個問答遊戲,但是當我點擊響應按鈕時,我得到一個NullPointerExceptionandroid setonclicklistener意圖空指針異常

似乎所有的變量都已初始化,任何人都可以幫助我嗎?

這是類:

public class QActivity extends Activity { 

    protected int qst = 0; 
    protected int err = 0; 
    protected String mode = ""; 
    protected Intent intent; 
    protected ArrayList<Integer> tb; 
    protected Integer x = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_q); 
     Button r1 = (Button) findViewById(R.id.rep1); 
     Button r2 = (Button) findViewById(R.id.rep2); 
     Button r3 = (Button) findViewById(R.id.rep3); 
     TextView txt = (TextView) findViewById(R.id.questiontxt); 
     Question q = new Question(); 
     DatabaseHelper myDbHelper = new DatabaseHelper(this); 

     tb = getIntent().getExtras().getIntegerArrayList("tb"); 

     mode = getIntent().getExtras().getString("Mode"); 
     qst = getIntent().getExtras().getInt("qst"); 
     err = getIntent().getExtras().getInt("err"); 

     if (mode.equals("25")) { 
      x = 0; 

      do { 
       x = (int) (Math.random() * 57); 

      } while (Verif(x, tb) == true); 

      tb.add(x); 
      qst += 1; 

      try { 
       q = myDbHelper.getQuestion(x); 
      } catch (SQLException sqle) { 
       throw sqle; 
      } 

      txt.setText(q.getQuestion()); 
      r1.setText(q.getAnswer1()); 
      r2.setText(q.getAnswer2()); 
      r3.setText(q.getAnswer3()); 

      TextView t1 = (TextView) findViewById(R.id.questid); 
      TextView t3 = (TextView) findViewById(R.id.questnumber); 

      intent = new Intent(this, QActivity.class); 
      intent.putExtra("Mode", mode); 
      intent.putExtra("qst", qst); 
      intent.putExtra("err", err); 
      intent.putExtra("tab", tb); 
     } 

     r1.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       startActivity(intent); 
      } 
     }); 

    } 

    public boolean Verif(int n, ArrayList<Integer> tbl) { 
     for (Integer s : tbl) { 
      if (s == n) 
       return true; 
     } 
     return false; 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_q, menu); 
     return true; 
    } 

} 

這是logcat的輸出:

12-12 00:27:47.233: W/dalvikvm(7142): threadid=1: thread exiting with uncaught exception (group=0x40c471f8) 
12-12 00:27:47.233: E/AndroidRuntime(7142): FATAL EXCEPTION: main 
12-12 00:27:47.233: E/AndroidRuntime(7142): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dreamappz.alamalmaarefa/com.dreamappz.alamalmaarefa.QActivity}: java.lang.NullPointerException 
12-12 00:27:47.233: E/AndroidRuntime(7142):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967) 
12-12 00:27:47.233: E/AndroidRuntime(7142):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992) 
12-12 00:27:47.233: E/AndroidRuntime(7142):  at android.app.ActivityThread.access$600(ActivityThread.java:127) 
12-12 00:27:47.233: E/AndroidRuntime(7142):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158) 
12-12 00:27:47.233: E/AndroidRuntime(7142):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-12 00:27:47.233: E/AndroidRuntime(7142):  at android.os.Looper.loop(Looper.java:137) 
12-12 00:27:47.233: E/AndroidRuntime(7142):  at android.app.ActivityThread.main(ActivityThread.java:4511) 
12-12 00:27:47.233: E/AndroidRuntime(7142):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-12 00:27:47.233: E/AndroidRuntime(7142):  at java.lang.reflect.Method.invoke(Method.java:511) 
12-12 00:27:47.233: E/AndroidRuntime(7142):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) 
12-12 00:27:47.233: E/AndroidRuntime(7142):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747) 
12-12 00:27:47.233: E/AndroidRuntime(7142):  at dalvik.system.NativeStart.main(Native Method) 
12-12 00:27:47.233: E/AndroidRuntime(7142): Caused by: java.lang.NullPointerException 
12-12 00:27:47.233: E/AndroidRuntime(7142):  at com.dreamappz.alamalmaarefa.QActivity.Verif(QActivity.java:87) 
12-12 00:27:47.233: E/AndroidRuntime(7142):  at com.dreamappz.alamalmaarefa.QActivity.onCreate(QActivity.java:47) 
12-12 00:27:47.233: E/AndroidRuntime(7142):  at android.app.Activity.performCreate(Activity.java:4470) 
12-12 00:27:47.233: E/AndroidRuntime(7142):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052) 
12-12 00:27:47.233: E/AndroidRuntime(7142):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931) 
12-12 00:27:47.233: E/AndroidRuntime(7142):  ... 11 more 
+2

這個班的第47行是什麼?如果它對您的問題類的引用,然後張貼該代碼的部分也 – codeMagic

+0

當你到達onClickListener時,看看你的哪些變量爲空。你在哪裏叫這個類來獲得'getIntentExtras'?而且,這堂課的第47行是什麼?我只問,因爲它可能是非常有針對性的 – codeMagic

回答

2

你應該改變這一行:

intent.putExtra("tab", tb); 

這樣:

intent.putExtra("tb", tb); 
+0

調試我開始模式25,問題和答案顯示,但是當我點擊響應按鈕,它會生成一個nullpointerexception – user1896191

+0

你把額外的意圖數據與關鍵「標籤」何時應該是「tb」。 –

+0

謝謝,這是我的一個粗心的錯誤 – user1896191

0

我建議使用此clickListener

r1.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     if (intent!=null) 
      startActivity(intent); 
    } 
}); 

,因爲如果你mode.equals( 「25」)是假的,那麼你的意圖是空的。