Android中Js与java的交互

原创 2015年07月10日 18:05:11

在最近项目开发中频繁用到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函数的返回值

@JavascriptInterfacepublic 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); 
              }
    });
}

相关文章推荐

Android中webview使用js与java交互

  • 2017年05月11日 18:18
  • 19.46MB
  • 下载

android webview一篇文章全面了解(基本使用,url拦截,js跟java交互)

1.前言最近几年混合应用越来越流行,及一部分功能用原生代码开发,一部分功能用html5实现。那什么时候用原生什么时候用网页呢?很多人第一反应就是经常变化的页面用网页开发,避免经常发包,不全对。其实因为...

在Android上实现Java和Js交互

其实webview加载资源的速度并不慢,但是如果资源多了,当然就很慢。图片、 css 、 js 、 html 这些资源每个大概需要 10-200ms ,一般都是 30ms 就 ok 了。不过webvi...

Android java与html js交互 html视频播放没有画面 画面卡顿

有很多设备开发时只有声音,没有画面,这个时候在androidmanifest.xml中添加应用程序application中设置硬件渲染为true,在Oncreate函数中启用硬件渲染即可。具体步骤如下...

Android中JS与Java的极简交互库-SimpleJavaJsBridge

前言最近接触android中js与java交互的东西很多,当然它们之间的交互方式有几种,但是我觉得这几种交互方式都存在一定的不足,这是我决定编写SimpleJavaJsBridge这个库的关键原因。我...

android 原生与web交互,java与js的互相调用

先来一张效果图 布局文件 不多说,直接贴代码,     android:layout_width="match_parent"     android:layout_height="match...

Android WebView中 JS与Java的交互

一般我们会定义一个内部类,方便获取外部类的信息以便传递给JS使用或者是将JS运行得到的值回传给Java代码以便在界面上实现更好的更新或者直接通过Java代码发送给服务器。 由于近期使用到高德地图的H...

Android混合开发 java和js交互

最近公司项目要用到js交互,第一次这样写,看了别人的教程,然后依样画葫芦,个中过程就不说啦,写点有用的,留着以后自己看! @SuppressLint("JavascriptInterface")...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中Js与java的交互
举报原因:
原因补充:

(最多只允许输入30个字)