java - 如何从另一个线程返回一个字符串?

标签 java android multithreading return

我想从另一个线程返回一个字符串“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/

相关文章:

android - "Intent.FLAG_ACTIVITY_CLEAR_TASK"如何在pre-honeycomb设备上使用?

javascript - 如果执行的 JavaScript 进入无限循环,Android WebView 将进入不可恢复状态

Java IO 线程安全

c++ - 对 std::map 中元素的引用是否可以失效?

java - Jodatime DateTimeFormatter 需要打印 GMT 时间而不是 UTC

java - 无法使用 response.sendRedirect 重定向

java - 在 IntelliJ IDEA 构建路径/模块中导入另一个项目?

android - Samsung Galaxy S8 设备上的 SecurityException

java - 如何使用 scribe 在 Grails 中实现 twitter 的仅应用程序身份验证?

android - 在 Android Java 类中调用 "getContentResolver "