首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android - chronometer启动和停止

Android - chronometer启动和停止
EN

Stack Overflow用户
提问于 2017-07-06 21:50:07
回答 2查看 1K关注 0票数 1

我想创建一个计时器,我可以用一个按钮启动和停止。使用下面的代码,我只是得到了一个空指针异常。我怎么才能避免它,或者将这两个功能设置为按钮呢?

代码语言:javascript
复制
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();    
            }
        }
    });

}

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-06 22:17:46

在初始化变量之前,您正在使用这些变量。“‘focus”和“x”在初始化之前使用。使用下面的代码来避免空指针异常:

代码语言:javascript
复制
     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();    
            }
        }
    });

}
票数 1
EN

Stack Overflow用户

发布于 2017-07-06 22:03:25

你的代码的问题是这一行:

代码语言:javascript
复制
long timeElapsed = SystemClock.elapsedRealtime() - focus.getBase();

由于焦点变量尚未初始化,因此会得到NullPointer。您应该在初始化之后调用getBase()。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44950867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档