Java 如何将数据传递到UI线程

Java 如何将数据传递到UI线程,java,android,asynchronous,Java,Android,Asynchronous,晚上好 我有一个这样的活动。在handleMessage中,我可以访问LarGetText字段并可以对其进行更改,但我无法使用stringLinks字段或其他非UI元素的字段(如TextView、Button、EditText等)。 如何添加到StringLink public class AboutUsActivity extends Activity { Handler h; TextView largeText; List<String> stringLinks; @Over

晚上好

我有一个这样的活动。在handleMessage中,我可以访问LarGetText字段并可以对其进行更改,但我无法使用stringLinks字段或其他非UI元素的字段(如TextView、Button、EditText等)。 如何添加到StringLink

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();
    }
}
关于活动的公共类扩展了活动{
处理程序h;
文本视图大文本;
列出链接;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
stringLinks=newarraylist();
largeText=(TextView)findViewById(R.id.textView1);
h=新处理程序(){
public void handleMessage(android.os.Message msg){
HTMLPasser解析器;
StringBuilder结果=新建StringBuilder();
试一试{
parser=newhtmlparser(String.valueOf(msg.getData());
List links=parser.getContentByClassName(“ab”);
for(迭代器迭代器=stringLinks.Iterator();迭代器
.hasNext();){
TagNode divElement=(TagNode)迭代器.next();
append(divElement.getText().toString());
}
}捕获(例外e){
e、 printStackTrace();
}
largeText.setText(newhtml);//工作
stringLinks.add(newhtml);//不起作用
}
};
MyHttpClientUsage connect=新的MyHttpClientUsage(h);
试一试{
connect.getInfoAbout();
}catch(httpe异常){
e、 printStackTrace();
}
}

}我不知道我是否正确理解了你

如果我这样做了,你可以使用class

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


它看起来真的很像SwingWorker(如果你编写了Swing应用程序,也许你会使用它)。

你有没有尝试过类似RunUnuithRead(Runnable action)的东西?新HTML从何而来?没有关于它的任何声明。正如一些人回答的(出于某种原因删除了它),您的“links”变量在try/catch语句之外是不可访问的newhtml来自connect.getInfoAbout(),并且它发送正确,因为largeText.setText(newhtml)可以工作。我想添加到stringList中,它可以在try/catch之外访问。对不起,有问题。