您好,我正在创建一个 Android 应用程序。我不喜欢使用 Android UI 系统,并选择使用 WebView 进行 UI 设计,因为它对来自 HTML5 背景的我来说更容易。 我尝试过 Cordova 和 Phonegap 等平台,但它们没有给我确切的控件 ID,因为我也有 Java 背景。所以重申一下,我仅将 WebView 用于 UI。
话虽如此,我想在 WebView 上运行少量 JavaScript 代码,即网络调用。我有一个使用 OkHttp 的网络后端,可以使这些连接正常!但我无法以对我当前的 webview 知识友好的方式获取任何数据。
这是我的 JavaScript 函数签名:
function makeRequest(method,url,data,callback){
... Code Here ...
}
我想这样调用它:
makeRequest("GET","http://www.example.com/",{
"key1" : "value1",
"key2" : "value2"
},(code,responseJSON) => {
... Handle Response...
});
到目前为止,在我的 Android/Java 端,我有这个:
@JavascriptInterface
public void makeRequest(String method, String url, String data, ??? callback){
... Handle Request Java-side ...
}
当请求被处理时,id喜欢如何调用回调函数。 就像事件监听器之类的,但我对类型“???”感到困惑应该, 或者我将如何调用该函数以便 JavaScript 代码可以接收 回调并继续。
我已经有了通过我的 JavaScriptInterface 与 webview 一起工作的单向代码。 而 JSON 没有问题,因为它在 JS 代码中转换为字符串,而 GSON 可以 解析并得到我需要的东西。就是这个回调把我难住了!
提前感谢您的帮助:)
最佳答案
你可以这样做,
public class MyJavaScriptInterface {
private final MyJavaScriptInterfaceCallBack myJavaScriptInterfaceCallBack;
public interface MyJavaScriptInterfaceCallBack{
void clickedAdmission(YourDataType code,String responseJSON);
}
public MyJavaScriptInterface(MyJavaScriptInterfaceCallBack myJavaScriptInterfaceCallBack) {
this.myJavaScriptInterfaceCallBack=myJavaScriptInterfaceCallBack;
}
@JavascriptInterface
public void applynow() {
myJavaScriptInterfaceCallBack.clickedAdmission();
}
}
然后在您的 Activity fragment 中
您的 fragment 或 Activity 必须实现
MyJavaScriptInterface.MyJavaScriptInterfaceCallBack
接口(interface)和方法。
在WebView中设置javascript接口(interface)
webView.addJavascriptInterface(new MyJavaScriptInterface(this), "YourRecognizer");
关于javascript - 使用 Webview Android 处理回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65809049/