Android中Js与java的交互

    在最近项目开发中频繁用到Js与Java的交互,今天把相关知识点整理出来,欢迎大家吐槽。啪啪啪~ 

1、Js调用Java中的方法: 
    a、对WebView进行设置

mWebView.addJavascriptInterface(new DmJavaScriptInterface(),"androidObject");

    在Js中androidObject就是DmJavaScriptInterface的一个对象,通过这个对象可以调用类中的相关方法 

    b、实现DmJavaScriptInterface类

  final class DmJavaScriptInterface {
        DmJavaScriptInterface() {
        }        @JavascriptInterface        
        public void getPhoto() {
            Log.e(TAG,"js调用原生方法");
            LsUIHelper.getInstance().showLsChoosePicListActivity(mContext, 13);
        }        @JavascriptInterface        
        public String getToken() {
            String token = getUserToken(mContext);  
           // Log.e(TAG, "getToken token :=" + token);    
            return token;
        }        @JavascriptInterface
        public void finishSubmit() {
            LsFeedbackListActivity.this.finish();
        }

    }

    在Js中通过androidObject.getPhoto(),androidObject.getToken(),androidObject.finishSubmit()就可以实现调用Java端的方法。 

2、Java调用Js方法 

基本格式:webView.loadUrl("javascript:sayHello()"); 
根据是否有参数和是否有返回值可以分为以下几类(sayHello()为Js中被调用的方法名): 

a、无参数无返回值

String call = "javascript:satHello()";
webView.loadUrl(call);

b、有参数无返回值

String str = "你好";
String call = "javascript:satHello(\""+str+"\")";
webView.loadUrl(call);

c、有参数有返回值 

    这类比较特殊,得分两种情况。在Android4.4之前不提供调用Js函数并获取返回值的方法。解决办法是先让java调用Js的方法(有参数无返回值),然后Js在改方法中回调Java的方法,并将结果作为参数传递给Java的方法。相关代码如下: 

1、Java调用Js方法

String str = "你好";
String call = "javascript:satHello(\""+str+"\")";
webView.loadUrl(call);

2、Js中调用Java的方法:

Function sayhello(str) {
    Window.androidObject.onResultContent(“hello”);
}

3、Java在回调方法中获取Js函数的返回值

@JavascriptInterface
public void onResultContent(int result) {  
    Log.i(LOGTAG, "onResultContentresult=" + result);
}

Android4.4之后使用evaluateJavascript即可 

Js端的方法:

function getGreetings() {     
 return 1;
 }

Java端代码

private void testEvaluateJavascript(WebView webView) {        
  webView.evaluateJavascript("getGreetings()", new ValueCallback<String>() {  
   @Override 
   public void onReceiveValue(String value) {     
       Log.i(LOGTAG, "onReceiveValue value=" + value); 
         }
    });
}


转载于:https://my.oschina.net/u/2491515/blog/538430

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值