java - 如何将字符串的值从线程传输到另一个线程?

标签 java android multithreading jsoup

我正在使用 Jsoup 解析网站的一部分,然后将其放入字符串中。我想将此字符串可视化为 TextView ,但由于只有创建 TextView 的线程可以修改它,因此我需要将字符串的值传递到主线程中。怎么办?

这是代码:(忽略 tabhost 的东西)

public class NewsAndAnnouncements extends Activity {

    TabHost host;
    FlyOutContainer container;
    Button bttoggle;
    Button bt1;
    String loggity;
    TextView tv1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        this.container = (FlyOutContainer) this.getLayoutInflater().inflate(
                R.layout.newsandannouncements, null);
        this.setContentView(container);

        host = (TabHost) findViewById(R.id.tabhost);
        host.setup();

        TabSpec specs = host.newTabSpec("TAGGITY EINZ");
        specs.setContent(R.id.tab1);
        specs.setIndicator("News");
        host.addTab(specs);

        specs = host.newTabSpec("TAGGITY ZWEI");
        specs.setContent(R.id.tab2);
        specs.setIndicator("Notices");
        host.addTab(specs);

        specs = host.newTabSpec("TAGGITY DREI");
        specs.setContent(R.id.tab3);
        specs.setIndicator("Events");
        host.addTab(specs);

        tv1 = (TextView) findViewById(R.id.textView1);

        /*
         * bttoggle = (Button) findViewById(R.id.bttoggle); bt1 = (Button)
         * findViewById(R.id.Button1);
         * 
         * bttoggle.setOnClickListener(new OnClickListener() {
         * 
         * @Override public void onClick(View v) { // TODO Auto-generated method
         * container.toggleMenu(); } });
         * 
         * bt1.setOnClickListener(new OnClickListener() {
         * 
         * @Override public void onClick(View v) { // TODO Auto-generated method
         * container.toggleMenu(); } });
         */

        Thread newsThread = new Thread() { 
            public void run() {

                Document doc = null;
                try {
                    doc = Jsoup
                            .connect(
                                    "http://acs.bg/Home/About_ACS/News_and_Events/News.aspx")
                            .get();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                Elements myin = doc.getElementsByClass("news_list");
                loggity = myin.toString();


                        Log.i("ELEMENTS HTML", loggity);

            }
        };
        newsThread.start();

        tv1.setText(loggity);

    }

}

最佳答案

尝试使用AsyncTask而不是线程。要修改 ui 线程上的 View ,请使用 runOnUiThread()方法在你的 Activity 中。

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        tv1.setText("...");
    }
});

关于java - 如何将字符串的值从线程传输到另一个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20455512/

相关文章:

java - 如何从 CLI 使用 apispark

java - 当应用程序处于后台时,无法在通知上看到操作按钮

java - 使异步查询同步

android - 使用 Android 指纹时出现问题 : IV required when decrypting. 使用 IvParameterSpec 或 AlgorithmParameters 提供

android - 我可以使用 Apache Cordova 从 AVD 中选择特定的 Android 设备模拟器吗?

c - 什么是 __lll_lock_wait_private 和 __lll_lock_wait_private,为什么它们会减慢我的代码速度?

C11 GCCthreads.h 未找到?

java - sitemesh和spring MVC装饰器模式问题

android - bouncycaSTLe 连接到 android studio

C# Windows 窗体线程 : My form seems not to run as own thread