Как сделать синхронизацию связи JavaScript-Java в Android WebView? - PullRequest
0 голосов
/ 24 октября 2011

У меня есть WebView, JS-код внутри. Также у меня есть интерфейс, позволяющий вызывать метод Java из WebView в код Java. Мне нужно передать данные из JS в Java. Для этого:

webView.loadUrl("javascript:getData()");

//Obtain Java object here

В JavaScript:

function gataData () {
    //serialize data to JSON, pass it as 'native' function param
    JSInterface.setLocationsData(data);// This calls a Java function setLocationsData(String param)
}

В интерфейсе JavaScript (код Java):

 void setLocationsData(String param){
    //parse JSON here, create Java Object
 }

Проблема: у меня есть задержка между вызовом скрипта в WebView после webView.loadUrl () и моментом, когда данные возвращаются в мой код Java. Java-код не ждет, пока JS завершит свой бизнес. Как мне это решить?

1 Ответ

2 голосов
/ 24 октября 2011

Единственное (хакерское) решение, с которым я столкнулся, - это задержка в одну секунду после вызова loadUrl.Для этого вы можете использовать addJavaSriptInterface () .

или, если обработка JS занимает слишком много времени, вы должны использовать обратные вызовы

<input type="button" value="Say hello" onClick="callYourCallbackFunctionHere('Hello Android!')" />

<script type="text/javascript">
    function callYourCallbackFunctionHere(toast) {
        Android.callAndroidCallback(toast);
    }
</script>

public class JavaScriptInterface {
    Context mContext;

    /** Instantiate the interface and set the context */
    JavaScriptInterface(Context c) {
        mContext = c;
    }

    /** Show a toast from the web page */
    public void callAndroidCallback(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...