在android js 调用java中怎样调用本地js文件里的方法并得到返回值

Android JS双向调用 - 坐如松,动如风 - ITeye技术网站
博客分类:
Android手机中内置了一款高性能webkit内核,该内核完美封装到了WebView组件中,而从js中直接调用java方法和在java中直接调用js方法更是让我们看到了WebView的强大,下面这个小例子介绍了怎样在js和java中双向调用方法
1.首先是布局文件main.xml
&?xml version="1.0" encoding="utf-8"?&
&LinearLayout xmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/webView"
&/LinearLayout&
2.在assets目录下新建一个index.html文件
&!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"&
&title&&/title&
&script type="text/javascript"&
//data数据类型为字符串,字符串里面是数组,每一个数组元素为一个json对象,例如"[{id:1,name:'张三',phone:''},{id:2,name:'李四',phone:'1896561'}]"
function setContactInfo(data)
var tableObj = document.getElementById("contact");
var jsonObjects = eval(data); //通过eval方法处理得到json对象数组
for(var i=0; i&jsonObjects. i++)
var jsonObj = jsonObjects[i]; //获取json对象
var tr = tableObj.insertRow(tableObj.rows.length); //添加一行
//添加三列
var td1 = tr.insertCell(0);
var td2 = tr.insertCell(1);
var td3 = tr.insertCell(2);
td1.innerHTML = jsonObj.
td2.innerHTML = jsonObj.
td3.innerHTML = jsonObj.
&!--onload="javascript:myObject.init()调用服务器端init方法--&
&body onload="javascript:myObject.init()"&
&table id="contact"&
&td&编号&/td&
&td&姓名&/td&
&td&电话&/td&
3.接着是Activity
package com.lamp.
import android.app.A
import android.os.B
import android.os.H
import android.webkit.WebV
public class HTMLActivity extends Activity {
private WebView webView =
public Handler handler = new Handler();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webView = (WebView)this.findViewById(R.id.webView);
//设置字符集编码
webView.getSettings().setDefaultTextEncodingName("UTF-8");
//开启JavaScript支持
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new MyObject(this,handler), "myObject");
//加载assets目录下的文件
String url = "file:///android_asset/index.html";
webView.loadUrl(url);
4.然后是绑定js的类MyObject
package com.lamp.
import org.json.JSONA
import org.json.JSONE
import org.json.JSONO
import android.os.H
import android.webkit.WebV
public class MyObject {
private Handler handler =
private WebView webView =
public MyObject(HTMLActivity htmlActivity, Handler handler) {
this.webView = (WebView)htmlActivity.findViewById(R.id.webView);
this.handler =
public void init(){
//通过handler来确保init方法的执行在主线程中
handler.post(new Runnable() {
public void run() {
//调用客户端setContactInfo方法
webView.loadUrl("javascript:setContactInfo('" + getJsonStr() + "')");
public static String getJsonStr(){
JSONObject object1 = new JSONObject();
object1.put("id", 1);
object1.put("name", "张三");
object1.put("phone", "123456");
JSONObject object2 = new JSONObject();
object2.put("id", 2);
object2.put("name", "李四");
object2.put("phone", "456789");
JSONArray jsonArray = new JSONArray();
jsonArray.put(object1);
jsonArray.put(object2);
return jsonArray.toString();
} catch (JSONException e) {
e.printStackTrace();
运行项目,我们可以看到两位联系人的信息显示在了屏幕上
浏览 29652
liaokang.java
浏览: 113966 次
来自: 湖南
不能正常调用 init
android4.3上
是否可以 ...
Apple.Chen 写道你确定这是插入排序而不是冒泡?插入排 ...
你确定这是插入排序而不是冒泡?
顶一个!!!android webview中使用Java调用JavaScript方法并获取返回值
投稿:junjie
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了android webview中使用Java调用JavaScript方法并获取返回值,本文直接给出代码示例,需要的朋友可以参考下
在android平板上用webview打开一个网页,调用里面的javascript方法,同时相互传参。
网上例子很少啊,基本都不能获取返回值,贴一个自己最后调试完的代码如下:
protected void onCreate(Bundle savedInstanceState)
x = (WebView)this.findViewById(R.id.webView_viewTable);
x.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
x.getSettings().setBuiltInZoomControls(true);
x.getSettings().setJavaScriptEnabled(true);
x.addJavascriptInterface(new JsToJava(), "stub");& //JsToJava是内部类,代码在后面。stub是接口名字。
//x.loadUrl("http://192.168.1.1/init.html");//这句是载入一个html页面。但是因为直接load一个网页会有延迟,所以最好用下面这句:
x.loadDataWithBaseURL("", data, "text/html", "UTF-8","");& //这句里面data是init.html的内容。就是代码。直接用FileInputStream获取到就好。
x.loadUrl("javascript:setValuesJson('hello world')"); //hello world是给JavaScript传递的参数。setValuesJson是页面里JavaScript的方法。如果传递的参数中有双引号的话,用下面的写法:
String url = "javascript:setValuesJson(\"" + jsonString + "\")";
x.loadUrl(url);
}//onCreate结束
再写一个内部类:
private class JsToJava
&&&&&&& public void jsMethod(String paramFromJS)
&&&&&&&&&&& //Log.i("CDH", paramFromJS);
&&&&&&&&&&& System.out.println("js返回结果" + paramFromJS);//处理返回的结果
JavaScript代码:
&script type="text/javascript"&
&&&&&&& function setValuesJson(param)
&&&&&&&&&&& alert(param);//param是java传过来的值,即"hello world".
&&&&&&&&&&& var result = "传回Java的string";
&&&&&&&&&&& window.stub.jsMethod(result);//用接口stub, 通过调用内部类中的方法jsMethod给java传回result。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具android关于使用js调用本地android&app
我现在做的一个demo,是需要使用一个js调起手机上我写的app。我是这么做的,在js和app的配置文件中约定一个uri。
JS的代码是:
function test(fail)
& & var isAndroid =
navigator.userAgent.match(/Android/i);
if(isAndroid)
&&&window.location.href
= "myapp://";&
app中配置文件中为:
结果可以实现调起这个app。问题是如果同时有两个app都是使用这个uri,怎么样让JS调用的是我写的这个app,而不会启动别人的app?
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。> 博客详情
摘要: Webview、JS
1.通过反射(各版本API,不一样),如下为4.2.2源码的方式:通过android.webkit.WebViewClassic的fromWebView拿到webview对应的WebViewClassic实例1,通过该实例1的getWebViewCore方法拿到对应的WebViewCore实例2,通过实例2拿到&mBrowserFrame实例3,通过实例3的stringByEvaluatingJavaScriptFromString方法拿到js的属性或方法返回值。
2.通过setJavascriptInterface方式,暴漏webview中的对象到JS中(4.2之前android有系统漏洞问题),该对象不断的向webview推送JS的方法的返回值或属性值。
3.webview定义事先好捕获URL的格式;JS在执行完方法后通过发起伪HTTP链接(并不是真正HTTP,而是为了webview的onLoadResource方法能够捕获);webview在onLoadResource中去捕获这种伪HTTP,根据事先定义好的URL格式,去获得已定义好的JS方法的返回值或属性值。
人打赏支持
码字总数 1940
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥}

我要回帖

更多关于 android调用js返回值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信