Android 按钮仅在我使用时单击两次

Android 按钮仅在我使用时单击两次,android,multithreading,jsoup,Android,Multithreading,Jsoup,我希望我的按钮在我单击一次时能正常工作。但是,只有单击两次它才能工作 我认为这个问题与Jsoup或线程有关,因为当我删除Jsoup方法时,它工作正常 当然,我添加了Jsoup库 这是我的密码: View.OnClickListener listener = new View.OnClickListener(){ @Override public void onClick(View v) { new Thread(){

我希望我的按钮在我单击一次时能正常工作。但是,只有单击两次它才能工作

我认为这个问题与Jsoup或线程有关,因为当我删除Jsoup方法时,它工作正常

当然,我添加了Jsoup库

这是我的密码:

View.OnClickListener listener = new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            new Thread(){
                public void run(){
                    String word = editText.getText().toString();
                    try {
                        doc = Jsoup.connect("https://endic.naver.com/search.nhn?sLn=kr&searchOption=all&query="+word).get();
                    } catch (IOException e) {

                    }

                    Elements el = doc.getElementsByClass("fnt_e30");

                    if(el.size() == 0){
                        s="There is no result.";
                        return;
                    }
                    s="OK";
                }
            }.start();
            textView.setText(s);
        }
    };
    btn_search.setOnClickListener(listener);

我猜“works”的意思是说
TextView
get设置了文本“OK”。在这种情况下,您的代码运行正常,您有
s=“OK”在单独的线程上运行。只有在该值之后,get的set才会
textView.setText(s)按预期运行。您可能希望按照以下思路做一些事情

    View.OnClickListener listener = new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            new Thread(){
                public void run(){
                    String word = editText.getText().toString();
                    try {
                        doc = Jsoup.connect("https://endic.naver.com/search.nhn?sLn=kr&searchOption=all&query="+word).get();
                    } catch (IOException e) {

                    }

                    Elements el = doc.getElementsByClass("fnt_e30");

                    if(el.size() == 0){
                        s="There is no result.";
                        return;
                    }
                    s="OK";
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            textView.setText(s);
                        }
                    });
                }
            }.start();
        }
    };
    btn_search.setOnClickListener(listener);

注意-正如ADM在评论中提到的,这是一个异步调用(因为它是在线程上完成的),
Jsoup.connect
将需要时间来连接和获取文档。您最好在单击按钮一次后将其停用(基本上是向用户指示请求正在处理,并要求他们等待结果)。

您这样做是错误的。您正在侦听响应并在变量中进行设置,但未在文本视图中进行设置

为什么会发生第二次?当您单击第一次时,将执行setText的代码,但该代码没有任何值

正确的方法。在s变量中设置值后添加此代码

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        textView.setText(s);
    }
});

原因是它是一个异步调用。。