我想创建一个可以通过一个按钮启动和停止的计时器。使用下面的代码,我只得到一个空指针异常。我怎样才能避免它,或者无论如何都将这两个功能设置为按钮?
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();
}
}
});
}
}
最佳答案
您在变量初始化之前使用它们。 '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();
}
}
});
}
关于Android - 计时器启动和停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44950867/