Can't create handler inside thread that has not called Looper.prepare()
哪位牛人帮我解决这问题

解决方案 »

  1.   

    朋友,我重现了你的问题,当我使用java.lang.Thread重现了你这个问题,log也是这个,原因很简单,Dialog的产生是需要Looper的,在Android里面有一种叫做Handler的类,他是专门处理线程的通讯问题的。你可以使用Handler把Thread换掉,这样就可以了,我已经实现了。
      

  2.   

    我记得好像有这么一个说法就是,Android中不能在子线程中来刷新UI线程。
    所以楼主如果要实现你这功能的话。建议是在你的子线程中添加hander来发送消息更新线程。
      

  3.   

    在主activity中定一个Handler的成员,然后实现handlemassage函数,创建线程后在runable的run函数里new一个message,然后指定message对象的what成员,这个是指定message的一个id,然后在run中调用Handler的成员,使用其成员方法中的sendmessage(好像是叫这个),handlemassage函数中参数有个massage,根据该message参数中的what来对你发送message时指定的what来处理UI的功能
      

  4.   


        private Handler mHandler = new Handler(){  
            
            public void handleMessage(Message msg) {  
                switch (msg.what) {  
                case ID_USER:  
                             //获取传递的数据
                                //Bundle data = msg.getData();
                 //int count = data.getInt("COUNT");
                            //处理UI更新等操作
                }  
            };  
        };        主activity中创建线程                 MyThread thread = new MyThread();          
                     mThread = new Thread(thread);
                     mThread.start();MyThread      class MyThread implements Runnable {
            public void run() {     
                           //执行数据操作,不涉及到UI
                        Message msg = new Message();     
                msg.what = ID_USER;
                      //这三句可以传递数据
              //  Bundle data = new Bundle();
               // data.putInt("COUNT", 100);//COUNT是标签,handleMessage中使用
               // msg.setData(data);
                
                mHandler.sendMessage(msg); // 向Handler发送消息,更新UI 
             }
      

  5.   

    4,5楼已经都说了,没啥好说的了,只是强调除了在onCreat()函数和Handler()函数,其他地方不要操作UI界面元素,线程只是用来下载数据的和其他操作的,操作完成了发送个Message到Handler()函数,然后再里面处理UI
      

  6.   

    跟我之前碰到的一样,解决方法5楼是一种方法,还有一种方法是使用Looper.prepare();配合Looper.loop();来实现。
      

  7.   


    Thread action = new Thread() 

    public void run() 
    {
    Looper.prepare();
    todo();
    Looper.loop();
     } 
    }; 
    action.start();
      

  8.   

    android下UI线程是不安全的,因此对于UI的操作,都要放在UI线程中,从另个线程发送消息给UI线程,是个解决方法