Java возвращение значения из функции

264
27 февраля 2018, 05:31

Не могу додуматься как вернуть значение...
У меня есть следующий код для получения html из WebView:

final String[] result = {""};
class MyJavaScriptInterface {
    @SuppressWarnings("unused")
    @JavascriptInterface
    public void processHTML(String html) {
        result[0] = html;
    }
}
browser.getSettings().setJavaScriptEnabled(true);
browser.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");
browser.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        browser.loadUrl("javascript:window.HTMLOUT.processHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
    }
});
browser.loadUrl(url);

Код рабочий, и в переменную result[0] действительно записывается нужное мне значение. Но мне нужно выполнять этот код много раз, и поэтому я хотел написать функцию с прототипом:

public static String getHTML(String url);

Но со следующей части кода

public void processHTML(String html) {
    result[0] = html;
}

не могу понять как можно вернуть это значение, там ведь void... Если же возвращать просто в конце функции, то возвращается пустая строка. Пример метода:

public static String getHTML(String url) {
final String[] result = {""};
    class MyJavaScriptInterface {
        @SuppressWarnings("unused")
        @JavascriptInterface
        public void processHTML(String html) {
            result[0] = html;
        }
        public void getHtml() {
            return result[0];
        }
    }
    MyJavaScriptInterface m = new MyJavaScriptInterface();
    browser.getSettings().setJavaScriptEnabled(true);
    browser.addJavascriptInterface(m, "HTMLOUT");
    browser.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            browser.loadUrl("javascript:window.HTMLOUT.processHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
        }
    });
    browser.loadUrl(url);
    return m.getHtml();
}
Answer 1

Не совсем понял. Нужно вернуть result[0] после выполнения processHTML()?
Просто в метод передается такой же параметр, который и будет возвращаться, зачем это?
Вижу 2 варианта: 1. поменять метод processHTML() таким образом:

public String processHTML(String html) {
    result[0] = html;
    return result[0];
}

2. Добавить геттер:

public void processHTML(String html) {
    result[0] = html;
}
public String getHTML(){
    return result[0];
}
READ ALSO
Как нарисовать 3D дом на SurfaceView

Как нарисовать 3D дом на SurfaceView

Из ApiDemo взял код 3D кубаНо немогу понять для чего 36 точек вместо 8-и

245
Поиск в объекте

Поиск в объекте

Всем приветТакой вопрос

219
Можноли через Exchanger передать данные в ui поток?

Можноли через Exchanger передать данные в ui поток?

Добрый день , углубляю знания и вот подумал а возможноли в Android передать данные из потока созданного через Thread Runnable в ui поток ?Ведь посути exchager...

224
Fxml controller, событие на checkbox

Fxml controller, событие на checkbox

Столкнулся с проблемой в самом неожиданном местеСоздана форма путем sceneBuilder и FXML и FXMLController

233