 悬赏园豆:10
                [已解决问题] 
            
                    解决于 2015-06-05 13:12
                悬赏园豆:10
                [已解决问题] 
            
                    解决于 2015-06-05 13:12 
                 
        场景:android调用wcf时创建新线程进行调用wcf
完成后调用在主线程里声明的Handler进行主线程操作后报错
仿照网上的其它资料又看了一下没找到什么问题,第一次使用没找到问题出在哪里,求助...
EditText edtest;
private Handler handler = new Handler(){
 @Override
 public void handleMessage(Message msg)
 {
 super.handleMessage(msg);
//viewPager.setCurrentItem(0);
 edtest.setText("tttttt");
 }
 };
@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
 getSupportFragmentManager().beginTransaction()
 .add(R.id.container, new PlaceholderFragment())
 .commit();
 }
try{
// 此处省略
View v = (View)view.getTag();
 if (v== null)
 return;
 edtest = (EditText)v.findViewById(R.id.nameEt);
new Thread(){
 public void run(){
 new ServiceShell().Add(name,phoneNo,reason,false);
 handler.handleMessage(handler.obtainMessage(0));
 }
 }.start();
}catch(Exception e){
 }
 }
错误的信息和没使用Handler的错误信息是一样的:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
你这个线程改成这样试试 new Thread(new Runnable(){
public void run(){
  new ServiceShell().Add(name,phoneNo,reason,false);
      handler.handleMessage(handler.obtainMessage(0));
}
}).start();
试了一下还是不行,一样的错误,还有什么地方需要注意的么?
@澈澈: 去掉这个试试,super.handleMessage(msg);
@Nice_cj_com: 还是不行呃,不明白问题出在哪里
@Nice_cj_com: ok,问题解决了,查了一下你说的Runnable,修改了一下handler的回调
1,在主线程实例handler,并未重写handleMessage
2,在新线程内handler的使用修改为
handler.post(new Runnable() {
 @Override
 public void run() {
 viewPager.setCurrentItem(0);
 }
 });
成功执行主线程动作.
依然多谢