Android App崩溃,代码无错误

时间:2019-04-16 19:24:47

标签: android crash

下面的代码是我的应用程序,它是一个倒计时计时器,每当我在模拟器上运行该应用程序时,它都会崩溃且没有错误! 我也在真实设备上运行了该应用程序,但这也是失败的。 我已经检查了清单和其他任何可能导致崩溃的原因。 我希望有人可以帮助我。

代码如下:

package com.example.taha.meditationcounter;

import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

import java.util.concurrent.TimeUnit;

public class MainActivity extends AppCompatActivity {

    private CountDownTimer timer = null;
    public final TextView tv = (TextView)findViewById(R.id.textView);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final SeekBar sb = (SeekBar) findViewById(R.id.seekBar);

        sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) { }
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) { }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                restartTimer(sb);
            }
        });

        final Button bt_stop = (Button) findViewById(R.id.btn1);
        bt_stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(timer !=  null){
                    timer.cancel();
                }

            }
        });
    }

    private void restartTimer(SeekBar sb){
        if(timer !=  null){
            timer.cancel();
        }
        final long millis = TimeUnit.SECONDS.toMillis(sb.getProgress());
        final long interval =  TimeUnit.SECONDS.toMillis(1);

        timer = new CountDownTimer(millis, interval) {
            @Override
            public void onTick(long millisUntilFinished) {
                tv.setText(String.format("Seconds remaining: %d", TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)));

            }

            @Override
            public void onFinish() {
                tv.setText("DONE");
            }
        };timer.start();
    }
}

1 个答案:

答案 0 :(得分:4)

此行:

final TextView tv = (TextView)findViewById(R.id.textView);

需要在onCreate()之内(在super.onCreate(savedInstanceState)setContentView(..)之后)。

我希望您的LogCat输出中会有某种形式的跟踪

编辑:

如果要在“活动”中的其他位置访问TextView tv,则可以在onCreate()之外声明onCreate(),但是您需要在private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView)findViewById(R.id.textView); //... } 内进行分配。例如:

submit