WEB开发网
开发学院手机开发Android 开发 Android线程交互(Handler+Thread 和 AsyncTask)... 阅读

Android线程交互(Handler+Thread 和 AsyncTask)

 2010-09-10 00:49:00 来源:WEB开发网   
核心提示:baos.write(buf, 0, ch);count += ch;}s = new String(baos.toByteArray());message.setText(s);}} catch (Exception e) {e.printStackTrace();}}}.start();}private void

baos.write(buf, 0, ch);

count += ch;

}

s = new String(baos.toByteArray());

message.setText(s);

}

} catch (Exception e) {

e.printStackTrace();

}

}

}.start();

}

private void connect() {

new Thread() {

public void run() {

try {

HttpClient client = new DefaultHttpClient();

// params[0]代表连接的url

HttpGet get = new HttpGet(url.getText().toString());

HttpResponse response = client.execute(get);

HttpEntity entity = response.getEntity();

long length = entity.getContentLength();

InputStream is = entity.getContent();

String s = null;

if (is != null) {

ByteArrayOutputStream baos = new ByteArrayOutputStream();

byte[] buf = new byte[128];

int ch = -1;

int count = 0;

while ((ch = is.read(buf)) != -1) {

baos.write(buf, 0, ch);

count += ch;

}

s = new String(baos.toByteArray());

message.setText(s);

}

} catch (Exception e) {

e.printStackTrace();

}

}

}.start();

}

重新运行NetworkActivity,点击“连接”按钮。程序并没有像预期的那种获得网页的内容,并显示到TextView上。查看log可以看到在connect的执行过程中抛出了异常。接下来分析问题的所在。

使用Handler更新界面

其实,connect()方法中抛出的异常是由于界面更新引起的。Connect()方法直接在新启动的线程中调用 message.setText()方法是不正确的。OPhone平台只允许在主线程中调用相关View的方法来更新界面。如果返回结果在新线程中获得,那么必须借助Handler来更新界面。为此,在NetworkActivity中创建一个Handler对象,并在handleMessage()中更新UI。

view plaincopy to clipboardprint?

//Task在另外的线程执行,不能直接在Task中更新UI,因此创建了Handler

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Android 线程 交互

编辑录入:coldstar [复制链接] [打 印]
赞助商链接