我希望我的按钮在单击一次后能够工作。但是,仅当我单击两次时它才有效。
我认为此问题与Jsoup或Thread有关,因为当我删除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);
答案 0 :(得分:0)
我猜测通过“工作”,您的意思是说TextView
的获取已设置为文本“ OK”。在这种情况下,您的代码可以正常运行,而s="OK";
在单独的线程上运行。只有设置了该值后,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);
P.S-正如ADM在评论中所提到的,这是一个异步调用(因为它是在线程上完成的),Jsoup.connect
将花费一些时间来连接并获取文档。您最好在单击一次按钮后将其停用(基本上向用户表明请求正在处理中,并请他们等待结果)。
答案 1 :(得分:0)
您正在以错误的方式进行操作。您正在侦听响应,并且也将其设置为变量,但未设置为textview。
为什么第二次发生?当您第一次单击setText时,将执行该代码,但没有任何值。
正确的方法。在 s 变量中设置值后,添加此代码。
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setText(s);
}
});