2 slaks SLaks 于 2013.05.23 11:26 提问

线程和 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();

3个回答

CSDN_Ask
CSDN_Ask   2013.05.23 17:18
已采纳

value 是一个整数值。传递一个整数值到 setText 方法,你可以通过 resource ID 从 strings.xml 文件中找到一个 String。如果你想显示一个数字,你需要把它解析成:String: Integer.toString(value)

franzhong
franzhong   2013.05.23 12:18

不能多线程更新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); 
}
wurenbi45
wurenbi45 人家不就是在handler中处理的吗?
4 年多之前 回复
luhuajcdd
luhuajcdd 更新UI只能到主线程(main thread)中, 如果在子线程中想更新,需要利用handler机制
4 年多之前 回复
wurenbi45
wurenbi45   2013.05.23 13:30

handler.post run里的EditText editText = ( EditText ) findViewById( R.id.editText1 );改成
EditText editText = ( EditText ) youractivity.this.findViewById( R.id.editText1 );

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!