Reputation: 57
I want to create a chronometer which I can start and stop with one button. With my code below I just get a nullpointer exception. How can I avoid it, or set the two functions to the button anyway?
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();
}
}
});
}
}
Upvotes: 1
Views: 1158
Reputation: 859
You are using variables before they are initialized. 'focus' and 'x' are used before they are initialized. Use this code instead to avoid nullpointer exception:
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();
}
}
});
}
Upvotes: 1
Reputation: 1175
The problem with your code is this line:
long timeElapsed = SystemClock.elapsedRealtime() - focus.getBase();
Since focus variable has not been initialized you get NullPointer. You should call getBase() after initialization.
Also, you should use ToggleButton instead of Button for this App.
Upvotes: 1