Не могу додуматься как вернуть значение...
У меня есть следующий код для получения 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];
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости