Не могу додуматься как вернуть значение...
У меня есть следующий код для получения 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();
}
Не совсем понял. Нужно вернуть 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];
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Из ApiDemo взял код 3D кубаНо немогу понять для чего 36 точек вместо 8-и
Добрый день , углубляю знания и вот подумал а возможноли в Android передать данные из потока созданного через Thread Runnable в ui поток ?Ведь посути exchager...
Столкнулся с проблемой в самом неожиданном местеСоздана форма путем sceneBuilder и FXML и FXMLController