Я пытаюсь получить переменную Javascript в веб-представлении, чтобы использовать ее в нативном коде Java. Я пробовал разные способы, чтобы достичь этого, но, к сожалению, всегда возникает одна и та же проблема. Я прочитал в документации по Android, что webview.loadURL () работает асинхронно. Это означает, что WebView работает в своем собственном потоке. Что происходит, так это то, что UI-поток будет работать дальше в коде Java и ничего не будет возвращен, потому что WebView-Thread все еще работает. Блокировка UI-потока не работает, потому что тогда поток WebView также будет заблокирован ( прочитайте здесь ).
Поэтому я попробовал способ, которым документация показала мне, и в итоге получил это:
String getJavascriptVariable(final String command) {
this.webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript(command + ";", new ValueCallback<String>() {
@Override
public void onReceiveValue(String s){tempVar = s;}
});
}
}
});
return tempVar;
}
tempVar является статической переменной в том же классе. Но он не вернет значение переменной Javascript в класс MainActivity. Так что мне делать?