制作一个简单的计数器,在 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 i
。 TextView
还提供了一个重载方法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);
}
});
}
我正在编写代码来显示每秒递增 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 i
。 TextView
还提供了一个重载方法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);
}
});
}