2013-05-19 2 views
0

Хорошо, поэтому я делаю приложение только для развлечения, на котором случайное число появляется на экране. Если вы нажмете кнопку с тем же номером, что и случайное число, которое вы получите, и если вы нажмете кнопку с неправильным номером, вы потеряете точку. Уловка у вас есть только 10 секунд, чтобы набрать достаточно очков (я не попал в ту часть, где я проверяю, набрал ли пользователь достаточное количество очков, чтобы выиграть). Во всяком случае, у меня две основные проблемы с приложением. Таймер не будет отображаться на экране без сбоя приложения (я поставил try/catch, чтобы остановить его от сбоя, чтобы я мог работать над другими вещами), и когда вы нажимаете правильную кнопку, ваш счет не увеличивается. Однако, если вы нажмете неправильную кнопку, оценка снизится. Я нахожу это очень странным.Android Trouble With TextViews and Buttons

Благодарим за помощь!

Вот моя активность Класс:

package ab.game.crazynumbers; 

import java.util.Random; 
import java.util.Timer; 
import java.util.TimerTask; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class Level1Activity extends Activity { 

Random r; 
Timer t; 
int random; 
int time; 
boolean running = false; 
TextView showingnumber; 
TextView score; 
TextView timer; 
Handler handler; 
Button b1; 
Button b2; 
Button b3; 
Button b4; 
Button b5; 
Button b6; 
Button b7; 
Button b8; 
Button b9; 
Button b0; 
int playerscore; 
TextView finalscore; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.level_1); 

    playerscore = 0; 

    showingnumber = (TextView) findViewById(R.id.game_number); 
    score = (TextView) findViewById(R.id.game_score); 
    timer = (TextView) findViewById(R.id.game_timer2); 
    finalscore = (TextView) findViewById(R.id.finalscore); 

    running = true; 
    time = 10; 

    b0 = (Button) findViewById(R.id.b1_0); 
    b1 = (Button) findViewById(R.id.b1_1); 
    b2 = (Button) findViewById(R.id.b1_2); 
    b3 = (Button) findViewById(R.id.b1_3); 
    b4 = (Button) findViewById(R.id.b1_4); 
    b5 = (Button) findViewById(R.id.b1_5); 
    b6 = (Button) findViewById(R.id.b1_6); 
    b7 = (Button) findViewById(R.id.b1_7); 
    b8 = (Button) findViewById(R.id.b1_8); 
    b9 = (Button) findViewById(R.id.b1_9); 

    randomnumber(); 

    b1.setOnTouchListener(new View.OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent e) { 

      if (e.getAction() == android.view.MotionEvent.ACTION_UP) { 

       if (1 == random) { 
        playerscore++; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 

       if (1 != random) { 
        playerscore--; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 
      } 

      return false; 

     } 
    }); 

    b2.setOnTouchListener(new View.OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent e) { 

      if (e.getAction() == android.view.MotionEvent.ACTION_UP) { 

       if (2 == random) { 
        playerscore++; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 

       if (2 != random) { 
        playerscore--; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 
      } 

      return false; 
     } 
    }); 

    b3.setOnTouchListener(new View.OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent e) { 

      if (e.getAction() == android.view.MotionEvent.ACTION_UP) { 

       if (3 == random) { 
        playerscore++; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 

       if (3 != random) { 
        playerscore--; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 
      } 

      return false; 
     } 
    }); 

    b4.setOnTouchListener(new View.OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent e) { 

      if (e.getAction() == android.view.MotionEvent.ACTION_UP) { 

       if (4 == random) { 
        playerscore++; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 

       if (4 != random) { 
        playerscore--; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 
      } 

      return false; 
     } 
    }); 

    b5.setOnTouchListener(new View.OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent e) { 

      if (e.getAction() == android.view.MotionEvent.ACTION_UP) { 

       if (5 == random) { 
        playerscore++; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 

       if (5 != random) { 
        playerscore--; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 
      } 

      return false; 
     } 
    }); 

    b6.setOnTouchListener(new View.OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent e) { 

      if (e.getAction() == android.view.MotionEvent.ACTION_UP) { 

       if (6 == random) { 
        playerscore++; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 

       if (6 != random) { 
        playerscore--; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 
      } 

      return false; 
     } 
    }); 

    b7.setOnTouchListener(new View.OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent e) { 

      if (e.getAction() == android.view.MotionEvent.ACTION_UP) { 

       if (7 == random) { 
        playerscore++; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 

       if (7 != random) { 
        playerscore--; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 
      } 

      return false; 
     } 
    }); 

    b8.setOnTouchListener(new View.OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent e) { 

      if (e.getAction() == android.view.MotionEvent.ACTION_UP) { 

       if (8 == random) { 
        playerscore++; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 

       if (8 != random) { 
        playerscore--; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 
      } 

      return false; 
     } 
    }); 

    b9.setOnTouchListener(new View.OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent e) { 

      if (e.getAction() == android.view.MotionEvent.ACTION_UP) { 

       if (9 == random) { 
        playerscore++; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 

       if (9 != random) { 
        playerscore--; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 
      } 

      return false; 
     } 
    }); 

    b0.setOnTouchListener(new View.OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent e) { 

      if (e.getAction() == android.view.MotionEvent.ACTION_UP) { 

       if (0 == random) { 
        playerscore++; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 

       if (0 != random) { 
        playerscore--; 
        runOnUiThread(new Runnable() { 
         public void run() { 
          score.setText("Your Score Is " + playerscore); 
         } 
        }); 
        randomnumber(); 
       } 
      } 

      return false; 
     } 
    }); 

    startTimer(); 

} 

public void startTimer() { 

    Timer t = new Timer("Game Timer"); 

    handler = new Handler(); 

    t.scheduleAtFixedRate(new TimerTask() { 

     @Override 
     public void run() { 

      if (time > 0) { 

       time -= 1; 

       runOnUiThread(new Runnable() { 
        public void run() { 
         try { 
          timer.setText("Seconds Remaining: "+ time); 
         } catch (Exception e) { 
         } 
        } 
       }); 

      } 

      if (time <= 0) { 
       this.cancel(); 
        finish(); 
      } 

     } 

    }, 

    // time before start of timer 
      0, 

      // time before it runs again 
      1000); 

} 

public void randomnumber() { 

    r = new Random(); 
    random = r.nextInt(10); 

    runOnUiThread(new Runnable() { 
     public void run() { 
      showingnumber.setText(String.valueOf(random)); 
     } 
    }); 

} 

} 

Вот мой XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/game_timer" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:text="Seconds Remaining: 0.0" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 

<TextView 
android:id="@+id/game_score" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_alignParentBottom="true" 
android:layout_alignParentLeft="true" 
android:gravity="center" 
android:text="Your Score Is 0" 
android:textAppearance="?android:attr/textAppearanceLarge" /> 

<Button 
    android:id="@+id/b1.4" 
    android:layout_width="80dp" 
    android:layout_height="50dp" 
    android:layout_alignLeft="@+id/b1.1" 
    android:layout_alignTop="@+id/b1.1" 
    android:layout_marginTop="73dp" 
    android:text="4" /> 

<TextView 
    android:id="@+id/game_number" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/game_timer" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="89dp" 
    android:gravity="center" 
    android:text="0" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 

<Button 
    android:id="@+id/b1.1" 
    android:layout_width="80dp" 
    android:layout_height="50dp" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/game_number" 
    android:layout_marginLeft="14dp" 
    android:layout_marginTop="130dp" 
    android:text="1" /> 

<Button 
    android:id="@+id/b1.7" 
    android:layout_width="80dp" 
    android:layout_height="50dp" 
    android:layout_above="@+id/game_score" 
    android:layout_alignLeft="@+id/b1.4" 
    android:layout_marginBottom="15dp" 
    android:text="7" /> 

<Button 
    android:id="@+id/b1.2" 
    android:layout_width="80dp" 
    android:layout_height="50dp" 
    android:layout_alignBaseline="@+id/b1.1" 
    android:layout_alignBottom="@+id/b1.1" 
    android:layout_centerHorizontal="true" 
    android:text="2" /> 

<Button 
    android:id="@+id/b1.5" 
    android:layout_width="80dp" 
    android:layout_height="50dp" 
    android:layout_alignBaseline="@+id/b1.4" 
    android:layout_alignBottom="@+id/b1.4" 
    android:layout_centerHorizontal="true" 
    android:text="5" /> 

<Button 
    android:id="@+id/b1.8" 
    android:layout_width="80dp" 
    android:layout_height="50dp" 
    android:layout_alignBaseline="@+id/b1.7" 
    android:layout_alignBottom="@+id/b1.7" 
    android:layout_centerHorizontal="true" 
    android:text="8" /> 

<Button 
    android:id="@+id/b1.0" 
    android:layout_width="80dp" 
    android:layout_height="50dp" 
    android:layout_above="@+id/b1.2" 
    android:layout_alignLeft="@+id/b1.2" 
    android:layout_marginBottom="18dp" 
    android:text="0" /> 

<Button 
    android:id="@+id/b1.6" 
    android:layout_width="80dp" 
    android:layout_height="50dp" 
    android:layout_alignBaseline="@+id/b1.4" 
    android:layout_alignBottom="@+id/b1.4" 
    android:layout_alignParentRight="true" 
    android:layout_marginRight="20dp" 
    android:text="6" /> 

<Button 
    android:id="@+id/b1.9" 
    android:layout_width="80dp" 
    android:layout_height="50dp" 
    android:layout_alignBaseline="@+id/b1.7" 
    android:layout_alignBottom="@+id/b1.7" 
    android:layout_alignLeft="@+id/b1.6" 
    android:text="9" /> 

<Button 
    android:id="@+id/b1.3" 
    android:layout_width="80dp" 
    android:layout_height="50dp" 
    android:layout_alignBaseline="@+id/b1.1" 
    android:layout_alignBottom="@+id/b1.1" 
    android:layout_alignLeft="@+id/b1.6" 
    android:text="3" /> 

</RelativeLayout> 

ответ

0

Ваш макет говорит game_timer и ваш код говорит game_timer2.

Проверьте это. ваши линии:

timer = (TextView) findViewById(R.id.game_timer2); 
finalscore = (TextView) findViewById(R.id.finalscore); 

game_timer2 и finalscore Не существует на макете.

Вы должны использовать Обработчик для редактирования своего графического интерфейса. Например. В своем классе добавить

static final int SCORE_UP = 1;  static final int SCORE_DOWN = 2; 

    final Handler mhandler = new Handler() { 
        int playerscore = 0; 
      @Override 
      public void handleMessage(Message msg) { 
       switch(msg.what){ 
       case SCORE_UP: 
       { 
        playerscore++; 
       } 
        break; 
       case SCORE_DOWN: 
       { 
        playerscore--; 
       } 
        break; 
        default: 

       } 
       score.setText("Your Score Is " + playerscore); 
      } 
    }; 

А где вы делаете позитивное использование

runOnUiThread(new Runnable() { 
    public void run() { 
    mhandler.sendMessage(Message.obtain(mhandler, SCORE_UP)); 
    //score.setText("Your Score Is " + playerscore); 
    } 
}); 
+0

Это решило проблему таймера, но изменить счет до сих пор не работает. Могли бы вы мне помочь и с этой проблемой? – user2154477

+0

Вы пытаетесь обновить пользовательский интерфейс из потока. Вы создаете обработчик на своем коде, но без содержимого для управления сообщением и никогда не отправляете ему сообщение. – soynerdito

+0

В этом примере я не запускал его, поэтому не знаю, как он себя ведет. я думаю, вы можете захотеть проверить «Серийные задачи выполнения», где вы можете запускать действия и выполняться по порядку. Это может сделать вашу игру немного более надежной, так как вы не получите провал до победы. или наоборот. – soynerdito