Android - 天文钟启动和停止
问题描述:
我想创建一个天文台,我可以启动和停止一个按钮。用我的代码下面我只是得到一个空指针异常。我怎样才能避免它,或无论如何设置两个功能的按钮?Android - 天文钟启动和停止
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();
}
}
});
}
答
与您的代码的问题是这一行:
long timeElapsed = SystemClock.elapsedRealtime() - focus.getBase();
由于焦点变量尚未初始化你空指针。 你应该在初始化之后调用getBase()。
此外,您应该使用ToggleButton而不是按钮为这个应用程序。
请提供更多详细信息!也许是堆栈跟踪。 –