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