制作一个简单的计数器,在 android 上每秒递增一次。我做错了什么?

Making a simple counter that increments every second on android. What wrong am I doing?

我正在编写代码来显示每秒递增 1 的计数器。

应用程序在 运行 错误之前被强制关闭 -

线程退出并出现未捕获的异常获取资源编号的值时没有包标识符

 public class MainActivity extends Activity {

    Handler hand = new Handler();
    TextView ti;
    int i =0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ti = (TextView) findViewById(R.id.textView);

        hand.postDelayed(run, 1000);
    }

    Runnable run = new Runnable() {
        @Override
        public void run() {
           i++;
           ti.setText(i);
        }
    };
}

我做错了什么?

ti.setText(i) 正在尝试通过 i 的值解析资源。 请尝试 ti.setText(String.valueOf(i));

方法textView.setText(int id)接受一个整数作为参数。例如R.string.app-name。当您将 i 作为参数传递时,它将检查 strings.xml 中的 ID iTextView还提供了一个重载方法setText(CharSequence text),你可以在这里使用。

textView.setText(""+i); textView.setText(String.valueOf(i));

如果你需要一个精确的计时器,你应该计算一个差值,从什么时候开始一个计时器,在每次调用中增加一个变量不是一个准确的解决方案,这里是代码,如果你想要一个精确的计时器

private long startTime;
private final Handler handler = new Handler();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final TextView textView = (TextView) findViewById(R.id.textView);

    startTime = System.currentTimeMillis();
    handler.post(new Runnable() {
        @Override
        public void run() {
            long diff = System.currentTimeMillis() - startTime;
            textView.setText(Long.toString(diff / 1000));
            handler.postDelayed(this, 1000);
        }
    });
}