Only the original thread that created a view hierarchy can touch its views
2011. 11. 20. 14:49
728x90
잘되던 프로그램에서 약간 수정을 했더니
"Only the original thread that created a view hierarchy can touch its views" 에러가 나면서 해당 동작이 수행이 되는건지...
결국 찾은 결론은.
Thread를 발생시켜 로직을 처리하는데
Runnable의 run Method에서 조회해 온 Data를
바로 TextView에 setText()하려다 위와같은 에러가 난 것 같다.
Handler에서 처리해 주니 정상적으로 작동한다.
실제 UI객체에 값을 넣은것은 여태까지 모두 Handler에서였는데....
private Runnable postRun = new Runnable(){
public void run(){
try{
ConnectionUtil cu = new ConnectionUtil();
postView = cu.getPostView(gHref);
//title.setText(postView.getTitle()) ---->> 기존에 시도했던 것에서 Exception, handler로 옮김
Message msg = postHandler.obtainMessage();
postHandler.sendMessage(msg);
return;
}catch(Exception e){
Log.e("MEMORUN", e.getMessage());
Message msg = postHandler.obtainMessage();
postHandler.sendMessage(msg);
}
}
};
private Handler postHandler = new Handler(){
public void handleMessage(Message msg){
title.setText(postView.getTitle());
loadingDialog.dismiss();
}
};
"Only the original thread that created a view hierarchy can touch its views" 에러가 나면서 해당 동작이 수행이 되는건지...
결국 찾은 결론은.
Thread를 발생시켜 로직을 처리하는데
Runnable의 run Method에서 조회해 온 Data를
바로 TextView에 setText()하려다 위와같은 에러가 난 것 같다.
Handler에서 처리해 주니 정상적으로 작동한다.
실제 UI객체에 값을 넣은것은 여태까지 모두 Handler에서였는데....
private Runnable postRun = new Runnable(){
public void run(){
try{
ConnectionUtil cu = new ConnectionUtil();
postView = cu.getPostView(gHref);
//title.setText(postView.getTitle()) ---->> 기존에 시도했던 것에서 Exception, handler로 옮김
Message msg = postHandler.obtainMessage();
postHandler.sendMessage(msg);
return;
}catch(Exception e){
Log.e("MEMORUN", e.getMessage());
Message msg = postHandler.obtainMessage();
postHandler.sendMessage(msg);
}
}
};
private Handler postHandler = new Handler(){
public void handleMessage(Message msg){
title.setText(postView.getTitle());
loadingDialog.dismiss();
}
};
728x90