我想创建一个计时器,我可以用一个按钮启动和停止。使用下面的代码,我只是得到了一个空指针异常。我怎么才能避免它,或者将这两个功能设置为按钮呢?
public class MainActivity extends ActionBarActivity {
Chronometer focus;
Button start, stop, reset;
long timeElapsed = SystemClock.elapsedRealtime() - focus.getBase();
int x;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
timeElapsed = x;
start = (Button) findViewById(R.id.button1);
focus = (Chronometer) findViewById(R.id.chronometer1);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(x == 0){
focus.start();
}
if(x != 0){
focus.stop();
}
}
});
}
}发布于 2017-07-06 22:17:46
在初始化变量之前,您正在使用这些变量。“‘focus”和“x”在初始化之前使用。使用下面的代码来避免空指针异常:
public class MainActivity extends ActionBarActivity {
Chronometer focus;
Button start, stop, reset;
long timeElapsed = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
start = (Button) findViewById(R.id.button1);
focus = (Chronometer) findViewById(R.id.chronometer1);
// to get the elapsed time use setonChronometerTickListener
focus.setOnChronometerTickListener(new OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer chronometer) {
timeElapsed = SystemClock.elapsedRealtime() - focus.getBase();
}
});
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(timeElapsed == 0){
focus.setBase(SystemClock.elapsedRealtime());
focus.start();
}
if(timeElapsed != 0){
timeElapsed = 0;
focus.stop();
}
}
});
}发布于 2017-07-06 22:03:25
你的代码的问题是这一行:
long timeElapsed = SystemClock.elapsedRealtime() - focus.getBase();由于焦点变量尚未初始化,因此会得到NullPointer。您应该在初始化之后调用getBase()。
此外,您应该使用ToggleButton,而不是按钮的应用程序。
https://stackoverflow.com/questions/44950867
复制相似问题