2013-02-13 39 views
0

晚上好。如何將數據傳遞給UI線程

我有這樣的活動。在handleMessage中,我可以訪問largeText字段並可以更改它,但是我無法對字符串鏈接字段或每個不是UI元素的其他字段(如TextView,Button,EditText等)進行掃描。 如何添加到字符串鏈接?

public class AboutUsActivity extends Activity { 

Handler h; 
TextView largeText; 
List<String> stringLinks; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    stringLinks = new ArrayList<String>(); 
    largeText = (TextView) findViewById(R.id.textView1); 

    h = new Handler() { 

     public void handleMessage(android.os.Message msg) { 
      HtmlParser parser; 
      StringBuilder result = new StringBuilder(); 
      try { 
       parser = new HtmlParser(String.valueOf(msg.getData())); 
       List<TagNode> links = parser.getContentByClassName("ab"); 
       for (Iterator<TagNode> iterator = stringLinks.iterator(); iterator 
         .hasNext();) { 

        TagNode divElement = (TagNode) iterator.next(); 
        result.append(divElement.getText().toString()); 
       } 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 


      largeText.setText(newhtml);  //Work 
      stringLinks.add(newhtml);    //doesn't work 
     } 

    }; 

    MyHttpClientUsage connect = new MyHttpClientUsage(h); 
    try { 
     connect.getInfoAbout(); 
    } catch (HttpException e) { 
     e.printStackTrace(); 
    } 
} 

}

+1

你嘗試過一些像runOnUiThread(Runnable動作)? – Tobrun 2013-02-13 14:43:03

+0

newhtml從哪裏來?它沒有任何聲明。正如有人回答說的(由於某種原因刪除它),你的'鏈接'變量不能在你的try/catch語句之外訪問 – dymmeh 2013-02-13 14:47:53

+0

newhtml來自connect.getInfoAbout()並且它發送正確的,導致largeText.setText(newhtml)作品。 – Valeriy 2013-02-13 14:53:04

回答

2

我不知道如果我理解正確的你。

如果我這樣做,你可以使用AsyncTask

檢查了他們的主要得方法,doInBackground執行在一個單獨的線程的東西,onPostExecute在UI線程中運行。他們可以與其他傳遞對象交流,也可以發佈任務的進度。

它看起來很像SwingWorker(如果你編寫了Swing應用程序,你可能會用到它)。