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