问题描述
- 线程和 NotFound resource exception
-
我现在遇见一个问题是 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 );
时间: 2024-10-03 18:46:55