我试图理解这段代码: 我不明白的是
来自obj
message.obj = result;
由谷歌api, 它是发送给收件人的任意对象。 为什么我们在这个java [android]世界中使用任意对象???
class DownThread extends Thread {
String mAddr;
DownThread(String addr) {
mAddr = addr;
}
public void run() {
String result = DownloadHtml(mAddr);
Message message = mAfterDown.obtainMessage();
message.obj = result;
mAfterDown.sendMessage(message);
}
String DownloadHtml(String addr) {
StringBuilder html = new StringBuilder();
try {
URL url = new URL(addr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
if (conn != null) {
conn.setConnectTimeout(10000);
conn.setUseCaches(false);
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream())
);
for(;;) {
String line = br.readLine();
if (line == null) break;
html.append(line + "/n");
}
br.close();
}
conn.disconnect();
}
} catch (NetworkOnMainThreadException e){
return e.getMessage();
} catch (Exception e){
return e.getMessage();
}
return html.toString();
}
}
Handler mAfterDown = new Handler() {
public void handleMessage(Message msg) {
mProgress.dismiss();
TextView result = (TextView) findViewById(R.id.result);
result.setText((String) msg.obj);
}
};
答案 0 :(得分:0)
Handler是用于在线程之间传递数据的机制。 Handler只允许您安排Message对象或Runnables在处理Handler的线程上执行。
您不能将任何旧对象发送到sendMessage(),因为它只接受Message类型的对象,因此他们使用Message中的obj字段来包含要发送的数据。
答案 1 :(得分:0)
document说:
要发送给收件人的任意对象。
因为Android并不确切知道要发送的Message
中的对象类型。
在您的代码中:message.obj = result;
obj
具有字符串类型。但在其他情况下,可能会分配其他类型的对象。