如何将数据传递给UI线程

时间:2013-02-13 14:37:23

标签: java android asynchronous

晚上好。

我有这样的活动。在handleMessage中,我可以访问largeText字段并且可以更改它,但是我不能使用stringLinks字段,或者不是UI元素的其他字段(如TextView,Button,EditText等)。 如何添加到stringLinks?

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 个答案:

答案 0 :(得分:2)

我不知道我是否理解正确。

如果我这样做,您可以使用AsyncTask

查看他们的主要方法,在单独的线程中执行某些操作的doInBackground和在UI线程中运行的onPostExecute。他们可以相互通信传递对象,您也可以发布任务的进度。

它看起来真的像SwingWorker(如果您编写了Swing应用程序,可能会使用它)。