zoukankan      html  css  js  c++  java
  • 【Android进阶】Android程序与JavaScript之间的简单调用

    本篇将讲解一个简单的Android与JavaScript之间的简单调用的小程序

    效果图



    工程结构



    HTMLActivity.java代码

    package com.example.javatojs;
    
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.webkit.WebView;
    
    public class HTMLActivity extends Activity {
    	private WebView webView = null;
    	public Handler handler = new Handler();
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            webView = (WebView)this.findViewById(R.id.webView);
            //设置字符集编码
            webView.getSettings().setDefaultTextEncodingName("UTF-8");
            //开启JavaScript支持
            webView.getSettings().setJavaScriptEnabled(true);
            //传递一个Java对象,同时给他命名,这个对象可以在js中调用这个对象的方法
            webView.addJavascriptInterface(new MyObject(this,handler), "myObject");
            //加载assets目录下的文件
            String url = "file:///android_asset/index.html";
            webView.loadUrl(url);
        }
    }
    


    MyObject.java

    package com.example.javatojs;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import android.os.Handler;
    import android.webkit.WebView;
    
    public class MyObject {
    	private Handler handler = null;
    	private WebView webView = null;
    
    	public MyObject(HTMLActivity htmlActivity, Handler handler) {
    		this.webView = (WebView) htmlActivity.findViewById(R.id.webView);
    		this.handler = handler;
    	}
    
    	public void init() {
    		// 通过handler来确保init方法的执行在handler绑定的Activity的主线程中
    		handler.post(new Runnable() {
    
    			public void run() {
    				// 调用客户端setContactInfo方法
    				webView.loadUrl("javascript:setContactInfo('" + getJsonStr()
    						+ "')");
    			}
    		});
    	}
    
    	public static String getJsonStr() {
    		try {
    			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();
    		}
    		return null;
    	}
    }
    

    activity_main.java

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
        <WebView
            android:id="@+id/webView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    
    </LinearLayout>


    index.html

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title></title>
    <script type="text/javascript">
    	//data数据类型为字符串,字符串里面是数组,每一个数组元素为一个json对象,例如"[{id:1,name:'张三',phone:'135656461'},{id:2,name:'李四',phone:'1896561'}]"
    	function setContactInfo(data) {
    		var tableObj = document.getElementById("contact");
    		//通过eval方法处理得到json对象数组
    		var jsonObjects = eval(data);
    		for (var i = 0; i < jsonObjects.length; i++) {
    			//获取json对象
    			var jsonObj = jsonObjects[i];
    			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.id;
    			td2.innerHTML = jsonObj.name;
    			td3.innerHTML = jsonObj.phone;
    		}
    	}
    </script>
    </head>
    <!--调用服务器端init方法-->
    <body onload="javascript:myObject.init()">
    	<table id="contact">
    		<tr>
    			<td>编号</td>
    			<td>姓名</td>
    			<td>电话</td>
    		</tr>
    	</table>
    </body>
    </html>
    

    源代码下载

    如有疑问,可留言

  • 相关阅读:
    动态调用web服务
    组件设计实战--组件之间的关系 (Event、依赖倒置、Bridge)
    .NET平台下可复用的Tcp通信层实现
    推荐所有的.NET开发人员阅读《J2EE Development without EJB》
    关于跨程序集的反射(续)
    IoC与DI (转载)
    某公司的一道机考题的解答
    使用 EmptyClass 避免条件判断
    EsbAOP应用--权限管理
    企业(分布式)计算十大谬误
  • 原文地址:https://www.cnblogs.com/oversea201405/p/3749555.html
Copyright © 2011-2022 走看看