我想从另一个线程返回一个字符串“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;
}
但是它不起作用。如何正确制作?
最佳答案
return finalUrl;
此代码永远不会返回您想要的字符串。
您需要通过多种技术之一来修复您的逻辑。对您来说最简单的方法是使用处理程序。像这样:
private static final int URL_MESSAGE = 1;
private final Handler handler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message message) {
super.handleMessage(message);
if (message.arg1 == URL_MESSAGE) {
final Object obj = message.obj;
if (obj instanceof String) {
String url = (String) obj;
}
}
}
};
private final Runnable runnable = 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();
String finalUrl = masthead.absUrl("src");
Message message = new Message();
message.arg1 = URL_MESSAGE;
message.obj = finalUrl;
handler.sendMessage(message);
}
};
@Override
protected void onDestroy() {
super.onDestroy();
handler.removeCallbacks(runnable);
}
private void execute() {
handler.post(runnable);
}
关于java - 如何从另一个线程返回一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37910285/