【发布时间】:2016-10-20 23:41:01
【问题描述】:
我想从另一个线程返回一个字符串“finalurl”,如下所示:
public String getImageURL(String url) {
final String finalUrl = url;
Thread t1 = new Thread(new Runnable() {
public void run() {
Document doc = null;
try {
doc = Jsoup.connect(finalUrl).get();
} catch (IOException e) {
e.printStackTrace();
}
Element masthead = doc.select("div.post-image").select("img[src~=(?i)\\.(png|jpe?g)]").first();
finalUrl = masthead.absUrl("src");
}
});
t1.start();
return finalUrl;
}
但它不起作用。如何正确制作?
【问题讨论】:
-
你要明白它是一个单独的执行线程,也就是说它是一个Async调用。它发布请求,其他线程开始获取最终 url。因此,在调用 getImageUrl 的线程到达函数末尾之前,不能保证 Thread t1 已完成执行。
-
首先查看 developer.android.com 上的 Processes and Thread 指南。关于您的问题,您可以尝试使用AsyncTask
-
也许你的
finalUrl应该是java.util.concurrent.Future<String>(或FutureTask)类型,所以你可以在它上面调用get来阻止,直到答案准备好。
标签: java android multithreading return