在Activity中產生一個thread處理資料的時候,當遇到這個資料要回去更新Activity畫面上的UI元件時,會發生 android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views 這樣的錯誤。
這個問題弄了好久,試了幾個方法都不能處理掉,還email給"Android開發範例大全"的作者(昨天寄的,現在還沒有得到回應),結果其實很簡單,是要用android.os.Handler配合android.os.Message來處理。但也許這在android開發是一般常識,不過因為我們學習的方法,並沒有從基本原理學起,而是直接看許多範例程式,才會不知道要怎麼讓Model跟View互動。
在Activity中自訂一個Handler: myViewUpdateHandler
Handler myViewUpdateHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case Main.GUIUPDATEIDENTIFIER:
// Do some GUI Stuff here
String serverCommand = (String) msg.obj;
processServerCommand(serverCommand);
break;
}
super.handleMessage(msg);
}
};
在onCreate時產生的thread裡面,就可以用android.os.Message來將訊息傳遞給Activity來更新顯示元件
Message m = new Message();
m.what = Main.GUIUPDATEIDENTIFIER;
m.obj = line;
沒有留言:
張貼留言