2016-03-21 9 views
1

Ich versuche, diesen Code zu verstehen: und was ich nicht verstehe, istBedeutung von message.obj [android network]

das obj von message.obj = Ergebnis;

von der Google API, ist es ein beliebiges Objekt an den Empfänger zu senden. Warum verwenden wir ein beliebiges Objekt in dieser Java [android] world ???

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

    } 

}; 

Antwort

0

Die document sagt:

Ein beliebiges Objekt an den Empfänger zu senden.

Weil Android nicht genau weiß, welche Art von Objekt in Message gesendet werden soll.

In Ihrem Code: message.obj = result; die obj hat String-Typ. In einem anderen Kontext kann jedoch ein anderer Objekttyp zugewiesen werden.

+0

Danke, du hast mir sehr geholfen. – bruno

0

Handler ist der Mechanismus, der verwendet wird, um Daten zwischen Threads zu übergeben. Mit Handler können Sie nur Nachrichtenobjekte oder Runnables planen, die auf dem Thread ausgeführt werden, der den Handler verarbeitet.

Sie können kein altes Objekt an sendMessage() senden, da es nur ein Objekt vom Typ Message verwendet, daher verwenden sie das obj-Feld in Message, um die zu sendenden Daten zu enthalten.