Android中Java和JS双向调用
2015-07-22 14:51
525 查看
找到满意的不错公司了,接下来就是自己的奋斗了。这两天弄一个WebView中JS的双向调用,大概猜得到其中的步骤方法,但是还是会有一些混乱和盲点。搜了几篇文章,看看代码,修修改改,先上代码,晚点后面再做总结。
(1)、MainActivity.java
(2)、MyObject.java
(3)、index.html
(4)、activity_main.xml
效果图:
一运行出现:
点击“调用android方法”按钮,出现:
点击“hohohahi”按钮出现:
参考文章:
http://liaokang-java.iteye.com/blog/1168832 http://blog.csdn.net/ljz2009y/article/details/39926039
(1)、MainActivity.java
package com.example.administrator.androidjstest; import android.app.Activity; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.os.Handler; import android.webkit.WebViewClient; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { private WebView webView; public Handler handler=new Handler(); public Button textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView=(Button)findViewById(R.id.textview); webView=(WebView)findViewById(R.id.webview); webView.getSettings().setJavaScriptEnabled(true); webView.setWebChromeClient(new WebChromeClient() { }); webView.getSettings().setDefaultTextEncodingName("UTF-8"); webView.addJavascriptInterface(new MyObject(this, handler), "myObject"); webView.loadUrl("file:///android_asset/index.html"); webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); String call = "javascript:sumToJava(1,2)"; webView.loadUrl(call); } }); textView.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { handler.post(new Runnable() { @Override public void run() { webView.loadUrl("javascript:showMsg()"); } }); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
(2)、MyObject.java
package com.example.administrator.androidjstest; import android.app.Activity; import android.content.Context; import android.support.v7.app.ActionBarActivity; import android.util.Log; import android.webkit.JavascriptInterface; import android.webkit.WebView; import org.json.JSONArray; import org.json.JSONObject; import android.os.Handler; import android.widget.Toast; /** * Created by Administrator on 2015/7/21. */ public class MyObject { private MainActivity ma; private WebView webView; private Handler handler; MyObject(MainActivity activity,Handler handler){ ma=activity; this.webView=(WebView)activity.findViewById(R.id.webview); this.handler=handler; } @JavascriptInterface public void showMessage(String msg) { Toast.makeText(ma, msg, Toast.LENGTH_SHORT).show(); } //Java回调js返回的数据 @JavascriptInterface public void onSumResult(int result) { Log.i("HJP", "onSumResult result=" + result); } @JavascriptInterface public void init(){ //通过handler来确保init方法的执行在主线程中 handler.post(new Runnable() { public void run() { //调用客户端setContactInfo方法 webView.loadUrl("javascript:setContactInfo('" + getJsonStr() + "')"); } }); } public static String getJsonStr(){ try{ JSONObject object=new JSONObject(); object.put("id",0); object.put("name","lzx"); object.put("phone","sbsbsb"); JSONObject object1=new JSONObject(); object1.put("id",1); object1.put("name","hjp"); object1.put("phone","nvshennvshen"); JSONArray jsonArray=new JSONArray(); jsonArray.put(object); jsonArray.put(object1); return jsonArray.toString(); }catch (Exception e){ e.printStackTrace(); } return null; } }
(3)、index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta name="viewport" content="width=device-width, target-densitydpi=device-dpi" /> <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> <script type="text/javascript"> function sumToJava(number1, number2){ window.myObject.onSumResult(number1 + number2) window.myObject.showMessage('Hope'); } function showMsg(){ alert("liuzhixinshidasha"); } function showMsgInAndroid(){ window.myObject.showMessage('hello in android!'); } <!--//data数据类型为字符串,字符串里面是数组,每一个数组元素为一个json对象,例如"[{id:1,name:'张三',phone:'135656461'},{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.length; 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.id; td2.innerHTML = jsonObj.name; td3.innerHTML = jsonObj.phone; } } </script> </head> <!--onload="javascript:myObject.init()调用服务器端init方法--> <body onload="javascript:myObject.init()"> <button id='btntest' onclick='showMsgInAndroid()'>调用android方法</button> <table id="contact"> <tr> <td>编号</td> <td>姓名</td> <td>电话</td> </tr> </table> </body> </html>
(4)、activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <WebView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/webview" android:layout_above="@+id/textview"> </WebView> <Button android:layout_width="match_parent" android:layout_height="60dp" android:text="hohohahi" android:gravity="center" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:id="@+id/textview"/> </RelativeLayout>
效果图:
一运行出现:
点击“调用android方法”按钮,出现:
点击“hohohahi”按钮出现:
参考文章:
http://liaokang-java.iteye.com/blog/1168832 http://blog.csdn.net/ljz2009y/article/details/39926039
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 异步流程控制:7 行代码学会 co 模块
- JavaScript拆分字符串时产生空字符的原因
- IE8开发人员工具教程(二)
- 在flex中执行一个javascript方法的简单方式
- Flex结合JavaScript读取本地路径的方法
- PowerShell中执行Javascript的方法示例
- javascript asp教程第六课-- response方法
- javascript asp教程More About Recordsets
- javascript asp教程第十二课---session对象
- javascript asp教程创建数据库连接
- javascript asp教程错误处理
- javascript asp教程第十课--global asa