Android中Java和JS双向调用
来源:互联网 发布:淘宝不能用 编辑:程序博客网 时间:2024/05/01 13:41
找到满意的不错公司了,接下来就是自己的奋斗了。这两天弄一个WebView中JS的双向调用,大概猜得到其中的步骤方法,但是还是会有一些混乱和盲点。搜了几篇文章,看看代码,修修改改,先上代码,晚点后面再做总结。
(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
0 0
- Android中Java和JS双向调用
- android js双向调用
- Android JS双向调用
- android js双向调用
- Android中Java和JS调用对方方法的简介
- Android中Java代码和Js代码相互调用
- android 调用js 和js中调用android的实现
- WebView中JS的双向调用
- android中webview调用js方法,js调用java方法
- Android WebView java和js互相调用
- android js 和java互相调用
- Android中webview与js双向交互
- Android JS双向调用(android set data to html)
- java调用js,js中调用java
- android调用js和js调用android
- [转载]Android笔记(三十六)Android中js和java的互调(二)(调用js获取返回值)
- Android Java中调用js代码,js中调用Java代码
- Android中webview里js和java的相互调用--含代码demo解析
- J2EE:数据访问层的设计相关概念
- LeetCode—数组(1)
- IOS开发多线程GCD的学习(二)
- windows编程--网络编程学习--winsock编程(2)
- Android手机怎么获取打印机的IP地址呢
- Android中Java和JS双向调用
- js实现分享到人人网微信和qq等等
- 使用secureCRT连接Ubuntu服务器
- poj 1789 Truck History(Prim)(中等)
- Netty实现服务端客户端长连接通讯及心跳检测
- JStorm学习笔记
- 使用java读取url网络文件
- 小胖说事30------iOS 强制转成横屏的方式
- 欢迎使用CSDN-markdown编辑器