Java 如何将数据传递到UI线程
晚上好 我有一个这样的活动。在handleMessage中,我可以访问LarGetText字段并可以对其进行更改,但我无法使用stringLinks字段或其他非UI元素的字段(如TextView、Button、EditText等)。 如何添加到StringLinkJava 如何将数据传递到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
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之外访问。对不起,有问题。