【问题标题】:My app crashes after clicking button单击按钮后我的应用程序崩溃
【发布时间】:2018-01-08 20:19:20
【问题描述】:

当我点击按钮时,我的应用程序崩溃了,我不知道为什么。我已经多次查找我的代码,但似乎找不到任何“重大缺陷”。该应用程序的目的是尽可能快地单击按钮两次,并显示从第一次点击到第二次点击所需的时间。某种反应的东西。我用了一个计时器,因为我不知道还能用什么。 (开始时间的值)-(当前计时器的值)=(第一次和第二次点击之间的时间)。

    <?xml version="1.0" encoding="utf-8"?>

<RelativeLayout

    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    tools:context="com.keklabs.reactiontimer.MainActivity">


    <TextView
        android:id="@+id/scoreText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="78dp"
        android:text="Click below to start!"
        android:textColor="#39FF14"
        android:textSize="30dp" />

    <Button
        android:id="@+id/startStopButton"
        android:layout_width="match_parent"
        android:layout_height="350dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:background="#000000"
        android:text="Start / Stop"
        android:textSize="25dp"
        android:textColor="#39FF14" />

</RelativeLayout>


public class MainActivity extends AppCompatActivity {

    private final long startTime = 0;
    private final long interval = 100;
    private boolean buttonClicked;
    private Button startStopButton;
    private TextView scoreText;

    CountDownTimer timer = new CountDownTimer(30000, 100) {

        @Override
        public void onTick(long millisUntilFinished) {
            scoreText.setText("kek"); //displayed text is value of starttime (30000) - current value of timer,
        }                             //some sort of reaction game thing

        @Override
        public void onFinish() {
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView scoreText = (TextView) findViewById(R.id.scoreText);
        Button startStopButton = (Button) findViewById(R.id.startStopButton);


        startStopButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!buttonClicked) {
                    timer.start();
                    buttonClicked = true;
                }
                else {
                    timer.cancel();
                    buttonClicked = false;
                }
            }
        });

    }

}

编辑

如何在scoreText.setText(startTime - millisUntilFinished); 行中以正确的方式显示 startTime-current 计时器值?

CountDownTimer timer = new CountDownTimer(startTime, interval) {

    @Override
    public void onTick(long millisUntilFinished) {
        scoreText.setText(startTime - millisUntilFinished);
    }

    @Override
    public void onFinish() {
    }
};

【问题讨论】:

  • 您忘记初始化scoreText 字段。

标签: java android xml crash


【解决方案1】:

实际上,您声明了您的TextView scoreText 两次。一个在全球范围内,另一个在本地。你可以替换TextView scoreText = (TextView) findViewById(R.id.scoreText); 到scoreText = (TextView) findViewById(R.id.scoreText); 在你的 onCreate()

【讨论】:

  • 如何使用正确的语法来做到这一点? public void onTick(long millisUntilFinished) { scoreText.setText(startTime - millisUntilFinished);
猜你喜欢
  • 2018-09-11
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多