message.obj的意思[android network]

时间:2016-03-21 00:27:11

标签: java android

我试图理解这段代码: 我不明白的是

来自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);

    }

};

2 个答案:

答案 0 :(得分:0)

Handler是用于在线程之间传递数据的机制。 Handler只允许您安排Message对象或Runnables在处理Handler的线程上执行。

您不能将任何旧对象发送到sendMessage(),因为它只接受Message类型的对象,因此他们使用Message中的obj字段来包含要发送的数据。

答案 1 :(得分:0)

document说:

  

要发送给收件人的任意对象。

因为Android并不确切知道要发送的Message中的对象类型。

在您的代码中:message.obj = result; obj具有字符串类型。但在其他情况下,可能会分配其他类型的对象。