2012-12-11 45 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”)是假的,那么你的意图是空的。