2012-04-01 4 views
0

Хорошо, ребята, я сделал тест на викторину, и вот основной класс викторины.Ошибка NullPointerException Android

public class startGame extends Activity { 

    List<Integer> list = new LinkedList<Integer>(); 
    CountDownTimer C1,C2; 
    MediaPlayer mp2,mp3; 
    int y = 0; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.startgame); 

     final Button r1 = (Button)findViewById(R.id.b1); 
     final Button r2 = (Button)findViewById(R.id.b2); 
     final Button r3 = (Button)findViewById(R.id.b3); 
     r1.setClickable(false); 
     r2.setClickable(false); 
     r3.setClickable(false); 
     anakatema(); 

     AdView ad = (AdView)findViewById(R.id.ad); 
     ad.loadAd(new AdRequest()); 

     mp2 = MediaPlayer.create(this, R.raw.correct); 
     mp3 = MediaPlayer.create(this, R.raw.wrong); 


     final TextView textic = (TextView) findViewById(R.id.myIVText2); 
     C1 = new CountDownTimer(31000, 1000) { 
     public void onTick(long millisUntilFinished) { 
      textic.setText("" + millisUntilFinished/1000); 
     } 

     public void onFinish() { 

      textic.setText("0"); 
      if ("1".equals(myMenu.k)) { r1.setBackgroundResource(R.drawable.buttonneocorrect);} 
      if ("2".equals(myMenu.k)) { r2.setBackgroundResource(R.drawable.buttonneocorrect);} 
      if ("3".equals(myMenu.k)) { r3.setBackgroundResource(R.drawable.buttonneocorrect);} 
      myMenu.lives = myMenu.lives - 1; 
      myMenu.streak = 0; 
      myMenu.k = checkFinish(); 
     } 

     public void onCancel() { 
      textic.setText("Oraios!"); 
     }  

     }.start(); 

     myMenu.k = checkFinish(); 

     r1.setOnClickListener (new View.OnClickListener() { 
      public void onClick(View v) { 
       r1.setClickable(false); 
       r2.setClickable(false); 
       r3.setClickable(false); 
       y=0; 
       if ("1".equals(myMenu.k)) { 
        r1.setBackgroundResource(R.drawable.buttonneocorrect); 
        myMenu.score = myMenu.score + 10; 
        myMenu.streak = myMenu.streak + 1; 
        if ("on".equals(myMenu.sound)) {mp2.start();} 
       } 
       else { 
        r1.setBackgroundResource(R.drawable.buttonneowrong); 
        if ("2".equals(myMenu.k)) { r2.setBackgroundResource(R.drawable.buttonneocorrect);} 
        if ("3".equals(myMenu.k)) { r3.setBackgroundResource(R.drawable.buttonneocorrect);} 
        myMenu.lives = myMenu.lives - 1; 
        myMenu.streak = 0; 
        if ("on".equals(myMenu.sound)) {mp3.start();} 
       } 
       C1.cancel(); 
       myMenu.k = checkFinish(); 
      } 
     }); 

     r2.setOnClickListener (new View.OnClickListener() { 
      public void onClick(View v) { 
       r1.setClickable(false); 
       r2.setClickable(false); 
       r3.setClickable(false); 
       y=0; 
       if ("2".equals(myMenu.k)) { 
        r2.setBackgroundResource(R.drawable.buttonneocorrect); 
        myMenu.score = myMenu.score + 10; 
        myMenu.streak = myMenu.streak + 1; 
        if ("on".equals(myMenu.sound)) {mp2.start();} 
       } 
       else { 
        r2.setBackgroundResource(R.drawable.buttonneowrong); 
        if ("1".equals(myMenu.k)) { r1.setBackgroundResource(R.drawable.buttonneocorrect);} 
        if ("3".equals(myMenu.k)) { r3.setBackgroundResource(R.drawable.buttonneocorrect);}     
        myMenu.lives = myMenu.lives - 1; 
        myMenu.streak = 0; 
        if ("on".equals(myMenu.sound)) {mp3.start();} 
       } 
       C1.cancel(); 
       myMenu.k = checkFinish(); 
      } 
     }); 

     r3.setOnClickListener (new View.OnClickListener() { 
      public void onClick(View v) { 
       r1.setClickable(false); 
       r2.setClickable(false); 
       r3.setClickable(false); 
       y=0; 
       if ("3".equals(myMenu.k)) { 
        r3.setBackgroundResource(R.drawable.buttonneocorrect); 
        myMenu.score = myMenu.score + 10; 
        myMenu.streak = myMenu.streak + 1; 
        if ("on".equals(myMenu.sound)) {mp2.start();} 
       } 
       else { 
        r3.setBackgroundResource(R.drawable.buttonneowrong); 
        if ("1".equals(myMenu.k)) { r1.setBackgroundResource(R.drawable.buttonneocorrect);} 
        if ("2".equals(myMenu.k)) { r2.setBackgroundResource(R.drawable.buttonneocorrect);}     
        myMenu.lives = myMenu.lives - 1; 
        myMenu.streak = 0; 
        if ("on".equals(myMenu.sound)) {mp3.start();} 
       } 
       C1.cancel(); 
       myMenu.k = checkFinish(); 
      } 
     }); 

    } 

    public String checkFinish() { 

     String h=""; 
     final AnyDBAdapter eventsData = new AnyDBAdapter(getBaseContext()); 
     myMenu.question = myMenu.question + 1; 
     if (myMenu.streak == 5) { 
      myMenu.lives = myMenu.lives + 1; 
     } 

     String qq = ""+list.get(0); 
     nextQ(); 

     eventsData.open(); 
     final Cursor c = eventsData.ExampleSelect(qq); 
     this.startManagingCursor(c); 
     eventsData.close(); 
     h = c.getString(5); 
     C2 = new CountDownTimer(2000, 1000) { 

      public void onTick(long millisUntilFinished) { 
      } 

      public void onFinish() { 
       if (myMenu.lives != -1) { 
        Button r1 = (Button)findViewById(R.id.b1); 
        r1.setBackgroundResource(R.drawable.buttonneo); 
        Button r2 = (Button)findViewById(R.id.b2); 
        r2.setBackgroundResource(R.drawable.buttonneo); 
        Button r3 = (Button)findViewById(R.id.b3); 
        r3.setBackgroundResource(R.drawable.buttonneo); 
        setQuestions(c); 
        c.close(); 
        C2.cancel(); 
        r1.setClickable(true); 
        r2.setClickable(true); 
        r3.setClickable(true); 
        y = 1; 
       } 
      } 
      }.start(); 

     C1.start(); 
     if (myMenu.lives == -1) { 
      C1.cancel(); 
      finish(); 
      startActivity(new Intent("dv.qtestgr.dvyzual.QuizTestActivity.ENDQUIZGAME")); 
     } 
     return h; 
    } 

    private void anakatema() { 
     int count = getTotalQuestions(); 
     for (int i = 1; i <= count; i++) { 
      list.add(i); 
     } 
     Collections.shuffle(list);  
    } 

    private int getTotalQuestions() { 
     final AnyDBAdapter eventsData = new AnyDBAdapter(getBaseContext()); 
     eventsData.open(); 
     Cursor c = eventsData.countQuestions(); 
     this.startManagingCursor(c); 
     String h = c.getString(0); 
     c.close(); 
     int n = Integer.parseInt(h); 
     eventsData.close(); 
     return n; 
    } 

    private void nextQ() { 
     list.remove(0); 
     if (list.isEmpty()) { 
      anakatema(); 
     } 
    } 

    private void setQuestions(Cursor c) { 
     TextView rscore = (TextView)findViewById(R.id.q1); 
     rscore.setText("Σκορ: " + myMenu.score + " Ερώτηση: " + myMenu.question); 
     TextView rlifes = (TextView)findViewById(R.id.myIVText); 
     rlifes.setText("" + myMenu.lives + ""); 
     TextView r0 = (TextView)findViewById(R.id.textView1); 
     r0.setText(c.getString(1)); 
     Button r1 = (Button)findViewById(R.id.b1); 
     r1.setText(c.getString(2)); 
     Button r2 = (Button)findViewById(R.id.b2); 
     r2.setText(c.getString(3)); 
     Button r3 = (Button)findViewById(R.id.b3); 
     r3.setText(c.getString(4)); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    { 
     //replaces the default 'Back' button action 
     if (y==0){ 
      return true; 
     } 
     if(keyCode==KeyEvent.KEYCODE_BACK) 
     { 

      C1.cancel(); 
      C2.cancel(); 
      finish(); 

     } 
     return true; 
    } 

} 

Это работает нормально, но после окончания игры, и запустить его еще несколько раз, у меня есть, что ошибки:

03-31 23:42:47.841: E/AndroidRuntime(1519): Uncaught handler: thread main exiting due to uncaught exception 
03-31 23:42:47.850: E/AndroidRuntime(1519): java.lang.NullPointerException 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at dv.qtestgr.dvyzual.startGame$4.onClick(startGame.java:139) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at android.view.View.performClick(View.java:2364) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at android.view.View.onTouchEvent(View.java:4179) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at android.widget.TextView.onTouchEvent(TextView.java:6541) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at android.view.View.dispatchTouchEvent(View.java:3709) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at android.app.Activity.dispatchTouchEvent(Activity.java:2061) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1691) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at android.os.Looper.loop(Looper.java:123) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at java.lang.reflect.Method.invoke(Method.java:521) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
03-31 23:42:47.850: E/AndroidRuntime(1519):  at dalvik.system.NativeStart.main(Native Method) 

Как я могу найти ошибку? Я считаю, что это что-то с переменной инициализации, но я немного слепым, чтобы найти его

+1

Во-первых: вы видите, сколько избыточного кода у вас есть в вашем приложении. Во-вторых: можете ли вы выделить или поместить некоторые индикаторы в строку, в которой происходит исключение. Я могу видеть его строку 139, но я не хочу рассчитывать на строку 139. 'at dv.qtestgr.dvyzual.startGame $ 4.onClick (startGame.java:139)' – Mayank

+0

thx Я думаю, что я просто решил, mediaplayer, который я всегда забываю .release(); когда действие заканчивается. И да, мой код немного сложнее, так как я новичок в android develepment ^^ около 139 строк, я назвал mp2.start, так что вы правы – user1234189

ответ

0

Попробуйте это:

Изменить это:

String qq = ""+list.get(0); 

к этому:

String qq = ""; 
if(!list.isEmpty()){ 
    qq += list.get(0); 
} 

, а также , изменить это:

private void nextQ() { 
    list.remove(0); 
    if (list.isEmpty()) { 
     anakatema(); 
    } 
} 

к этому:

private void nextQ() { 
    if(!list.isEmpty()){ 
     list.remove(0); 
    } else { 
     anakatema(); 
    } 
} 

Я хотел бы знать результат;)

+0

Строка 3 логарифма говорит, что исключение происходит в onClick() – gobernador

+0

не (должно быть что-то еще!) – user1234189

+0

dv.qtestgr.dvyzual.startGame $ 4.onClick (startGame.java:139) говорит об ошибке из строки 139, которая является 'nextQ();', строка 139 находится внутри метода checkFinish(), который вызывается в последней строке метода onClick(). Если мое решение не работает, последнее предположение будет связано с проблемой метода anakatema(). У меня есть -1, поэтому нет мотивации смотреть дальше. – Meti

0

Ваш Button s r1, r2 и r3 определены в onCreate(), и поэтому сфера их применения ограничена методом. Определите их как поля и код должен работать.

+0

не работал, думаю, что это связано с медиаплеер как id Ont выпускает музыку. в консоли перед этими красными ошибками, у меня есть синяя ошибка для медиаплеера – user1234189

+0

, что говорит строка 139? Я просто догадываюсь, потому что у меня нет номеров строк – gobernador

+0

, это был запуск медиапланера, и, как я забыл .release, когда действие заканчивается, это вызывает эту ошибку. по крайней мере я решил это спасибо;) – user1234189

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