【发布时间】:2020-07-07 22:49:12
【问题描述】:
基本上,我在线程中从网站获取一些链接并将其添加到 ArrayList。 但是,当我检查 ArrayList 的大小时,它返回 0。无论如何,是否可以让其中的新值反映线程之外。
代码如下:
lsiter.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final ArrayList<String>LinkAr = new ArrayList<String>();
new Thread(new Runnable() {
@Override
public void run() {
Document doc = null;
try {
doc = Jsoup.connect(message).get();
} catch (IOException e) {
e.printStackTrace();
}
//Title
Element TitleSpan = doc.select("span.detail-info-right-title-font").first();
String TitleString = TitleSpan.text();
//Chaps Names
Elements Chaps = doc.getElementsByClass("title3");
for(Element item: Chaps){
LinkAr.add(item.text());
}
}
}).start();
int pos = parent.getPositionForView(view);
String ClickedVal = (String) parent.getItemAtPosition(position);
Toast.makeText(ChapterPage.this, LinkAr.size() + "@ " + ClickedVal, Toast.LENGTH_SHORT).show();
}
});
【问题讨论】:
-
您启动了一个线程来构建列表,但您没有等待它完成。如果你在启动线程后立即需要它的结果,那么首先创建线程是没有意义的,逻辑是顺序的。
-
我需要创建线程,因为在android中所有网络进程都必须在线程上运行
-
然后你必须等待它完成。将线程分配给变量并使用 thread.join()
-
你能举一个这段代码的例子吗,我还是线程新手
-
如果你有一个线程:
Thread t=new Thread(...); t.start();t.join();
标签: java android multithreading