场景: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);
}
});
成功执行主线程动作.
依然多谢