天天看點

Android與JavaScript方法互相調用

Activity代碼

public class JSandJavaActivity extends Activity {

 WebView webView= null;

 Handler handler = new Handler();//進行異步通訊

@Override

    public void

onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

webView = (WebView) this.findViewById(R.id.webview);

webView.getSettings().setJavaScriptEnabled(true);//隻有設為true才能與javascript進行通訊

webView.addJavascriptInterface(new

Object(){//讓javascript能調用java中的方法

         public

void show(){

  handler.post(new

Runnable(){

     @Override

     public

void run() {

      //webView.loadUrl("javascript:pageini()");

      webView.loadUrl("javascript:personlist('"+query()+"')");//調用javascript函數

     }

  });

 }

}, "caller");

webView.loadUrl(path);//載入頁面

    }

    public

static String query(){//構造json對象

 JSONArray array = null;

  try {

   JSONObject

object = new JSONObject();

   object.put("id",

1);

   object.put("name","lybeen");

   object.put("age",

23);

   object.put("address",

"HZ");

object2 = new JSONObject();

   object2.put("id",

2);

   object2.put("name","lybeen2");

   object2.put("age",

24);

   object2.put("address",

"SH");

   array = new

JSONArray();

   array.put(object);

   array.put(object2);

  } catch (JSONException e)

{

   // TODO

Auto-generated catch block

   e.printStackTrace();

  }

 return array.toString();

}

HTML代碼

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML

<head>

<meta http-equiv="Content-Type" content="text/html;

charset=utf-8" />

<title>無标題文檔</title>

<script

language="javascript">

 function

personlist(jsons){      //傳json對象

  var

table=document.getElementByIdx_x("person");

arr=eval_r(jsons);

  for(var

i=0;i<arr.length;i++){

   var

jsonobj = arr[i];

tr = table.insertRow(table.rows.length);

td1 = tr.insertCell(0);

td2 = tr.insertCell(1);

td3 = tr.insertCell(2);

td4 = tr.insertCell(3);

   td1.innerHTML

= jsonobj.id;

   td2.innerHTML

= jsonobj.name;

   td3.innerHTML

= jsonobj.age;

   td4.innerHTML

= jsonobj.address;

</script>

</head>

<body onload="caller.show()"> 

//調用java中的函數

<table width="100%"

id="person">

 <tr

bgcolor="#33FFFF">

 <td>id</td>

<td>name</td>

<td>age</td>

<td>address</td>

</tr>

<!-- <a onclick="window.caller.show()">click

me</a> -->

</table>

</body>

</html>