使用Handler更新界面
其实,connect()方法中抛出的异常是由于界面更新引起的。Connect()方法直接在新启动的线程中调用message.setText()方法是不正确的。OPhone平台只允许在主线程中调用相关View的方法来更新界面。如果返回结果在新线程中获得,那么必须借助Handler来更新界面。为此,在NetworkActivity中创建一个Handler对象,并在handleMessage()中更新UI。
//Task在另外的线程执行,不能直接在Task中更新UI,因此创建了Handler
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
String m = (String) msg.obj;
message.setText(m);
}
};
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
String m = (String) msg.obj;
message.setText(m);
}
};
当从connect()方法中获得网页内容后,使用如下方法更新界面。
s = new String(baos.toByteArray());
Message mg = Message.obtain();
mg.obj = s;
handler.sendMessage(mg);
Message mg = Message.obtain();
mg.obj = s;
handler.sendMessage(mg);
重新运行NetworkActivity,点击“连接”按钮,结果如图2示,正确读取了网页的内容。
