我正在编写代码来显示一个每秒递增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);
}
};
}
我做错了什么?
答案 0 :(得分:1)
ti.setText(i)
正在尝试按i的值解析资源。
请改为ti.setText(String.valueOf(i));
。
答案 1 :(得分:1)
方法textView.setText(int id)
将int作为参数。对于例如R.string.app-name
。当您将i
作为参数传递时,它会检查i
中的ID strings.xml
。 TextView
还提供了重载方法setText(CharSequence text)
,您可以在此处使用。
textView.setText(""+i);
或 textView.setText(String.valueOf(i));
答案 2 :(得分:1)
如果你需要一个精确的计时器,你应该计算一个差异,从启动计时器开始,在每次通话中增加一个变量都不是一个准确的解决方案,这里是代码,如果你想要一个精确的计时器
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);
}
});
}