我现在遇见一个问题是 NotFound resource exception。我确信 resource-id和我设置的是一样的,但总是不对。第一行"findViewById( R.id.editText1 )" 可以很好的运行,可以在editText1中看到 "start!" 标签。
但是第二行在线程中,有错误信息:09-29 00:17:45.103: E/AndroidRuntime(347): android.content.res.Resources$NotFoundException: String resource ID #0x0
如何解决这个问题呢?
EditText editText = ( EditText ) findViewById( R.id.editText1 );
editText.setText( "start!" );
final Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
for (int i = 0; i <= 10; i++) {
final int value = i;
try {
Thread.sleep( 1000 );
} catch ( InterruptedException e ) {
e.printStackTrace();
}
handler.post( new Runnable() {
@Override
public void run() {
EditText editText = ( EditText ) findViewById( R.id.editText1 );
editText.setText( value );
}
} );
}
}
};
Thread thread = new Thread( runnable );
thread.start();
value 是一个整数值。传递一个整数值到 setText 方法,你可以通过 resource ID 从 strings.xml 文件中找到一个 String。如果你想显示一个数字,你需要把它解析成:String: Integer.toString(value)
不能多线程更新UI
这也正是为啥都通过handler来通信处理了
handler通信有多种方法,给你个简单的事例:
更新UI:
Handler mHandler;//public
//......
final EditText editText = ( EditText ) findViewById( R.id.editText1 );
myHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 110:
Bundle b = msg.getData();
String name = b.getString("name");
editText.setText(name);
break;
}
super.handleMessage(msg);
}
};
发送数据:
//thread run
public void run() {
Message message=new Message();
Bundle b = new Bundle();
b.putString("name", "zhangSam"); //send a string
message.what=110;
message.setData(b);
myHandler.sendMessage(message);
}
handler.post run里的EditText editText = ( EditText ) findViewById( R.id.editText1 );改成
EditText editText = ( EditText ) youractivity.this.findViewById( R.id.editText1 );