无法在我的 Android 应用程序中从 Javascript 调用我的 Java 类

Unable to call my Java class from Javascript In my Android App

本文关键字:我的 调用 Javascript Java 应用程序 Android      更新时间:2023-09-26

我不知道下面的代码出了什么问题,我试图使用 webview addJavainterface 从 JavaScript 代码调用我的 Java 类,但似乎不起作用,我尝试按照 android 网站上的教程进行操作,但仍然没有运气帮助,我实际上不知道缺少什么.. 这是我的代码...我的JavaScript代码是这样的:

public class HomeFragment extends Fragment {
 private WebView webView;
 private Bundle webViewBundlehome;  
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {        
    View rootView = inflater.inflate(R.layout.home_layout, container, false);
    webView =(WebView) rootView.findViewById(R.id.webViewHome);
    WebSettings websettings = webView.getSettings(); 
    websettings.setJavaScriptEnabled(true);
    websettings.setDomStorageEnabled(true);
    webView.addJavascriptInterface(new JavaScriptInterface(),"Android");
    if(webViewBundlehome==null){
        webView.loadUrl("file:///android_asset/www/index.html");
    }
    else
    {
        webView.restoreState(webViewBundlehome);        
    }
    return rootView;
}

@Override
public void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    webViewBundlehome = new Bundle();
    webView.saveState(webViewBundlehome);
}

public class JavaScriptInterface {
    private Activity activity;      
    public void opencart(String cart_id){
        Intent intent = new Intent(activity, Cartegory.class);
        intent.putExtra("cart_id", cart_id);
        startActivity(intent);          
    }
    public void openproduct(String pro_id){
        Intent intent = new Intent(activity,view.class);
        intent.putExtra("pro_id", pro_id);
        startActivity(intent);
    }
}}

$('#mybutton').on("click",function(){
Android.openproduct(product_id);
})

android:targetSdkVersion="19" 

由于您的目标是 API 19,因此您需要使用 @JavascriptInterface 来装饰opencartopenproduct java 方法。详情请看这里。
但它看起来像

class JsObject {
    @JavascriptInterface
    public String toString() { return "injectedObject"; }
}

我还会做一些简单的事情(例如日志消息)来确保javascript调用正常工作;然后更新为启动活动。