2016-03-21 11 views
1

私はこのコードを理解しようとしている: と私は理解していないが意味[アンドロイドネットワーク]

objある message.obj =結果から、

google 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

documentは言う:

任意のオブジェクトが受信者に送信します。

Androidは、Messageのオブジェクトの種類が正確に分からないため、送信しません。

コード内:message.obj = result;objには文字列型があります。しかし、他の状況では、他のタイプのオブジェクトを割り当てることができる。

+0

ありがとう、あなたは私を助けてくれました。 – bruno

0

ハンドラは、スレッド間でデータを渡すために使用されるメカニズムです。 Handlerは、Handlerを処理しているスレッド上で実行されるMessageオブジェクトまたはRunnableのスケジューリングのみを許可します。

古いオブジェクトをsendMessage()に送信することはできません。これは、Message型のオブジェクトだけを取るため、メッセージ内のobjフィールドを使用して送信するデータを格納するためです。