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();  
      } 
     } 
    }); 

} 

} 
+0

请提供更多详细信息!也许是堆栈跟踪。 –

您在初始化之前使用变量。 '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();  
      } 
     } 
    }); 

} 
+0

它似乎工作,但我不能让它停止计数,通过重新点击按钮 – MalteKlg1

+0

它将停止只有当x不等于0,所以分配一个新的价值x以外0在重新点击停止它之前。 – Ali

+0

但在计数时不是x不等于0,是吗? – MalteKlg1

与您的代码的问题是这一行:

long timeElapsed = SystemClock.elapsedRealtime() - focus.getBase(); 

由于焦点变量尚未初始化你空指针。 你应该在初始化之后调用getBase()。

此外,您应该使用ToggleButton而不是按钮为这个应用程序。

+0

如何使用togglebutton?我是否设置了一个条件,并且可以在停用按钮后收回条件? – MalteKlg1

+0

除了视觉表示方面的差异之外,切换按钮具有方法'start.isChecked()',您可以在侦听器中使用该方法来区分它是打开还是关闭。 开始是ToggleButton类型的变量 – Gotiasits

+0

好吧,我试过了。当我取消按钮时,它似乎停止计数,但是当我重新检查它时,可以看到,它没有显示它计数,但时间继续 – MalteKlg1