隨筆-348  評論-598  文章-0  trackbacks-0


          在項目的assets目錄放入index.html文件

          <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <title>聯系人列表</title>
          <script type="text/javascript">
          //我們傳入的jsondata是一個數組如:
          //[{id:20,name:"王昌龍",phone:"18701445755"},......] 這樣
           function show(jsondata){
            var jsonobjs = eval(jsondata);
            var table = document.getElementById("personTable");
            for(var y=0; y<jsonobjs.length; y++){
                   var tr = table.insertRow(table.rows.length); //添加一行
                   tr.onmouseover = function (){
                    this.style.backgroundColor= "red";
                   }
                   tr.onmouseout = function (){
                    this.style.backgroundColor= "#000000";
                   }
                   //添加三列
                   var td1 = tr.insertCell(0);
                   var td2 = tr.insertCell(1);
                   td2.align = "center";
                   var td3 = tr.insertCell(2);
                   //設置列內容和屬性
                   td1.innerHTML = jsonobjs[y].id; 
                   //轉義
                   td2.innerHTML = "<a href='javascript:partner4java.call(\"5554\")'>"+ jsonobjs[y].name + "</a>"; 
                   td3.innerHTML = jsonobjs[y].phone;
            }
           }

           function init(){
            var jsondata  = "[{id:20,name:\"王昌龍\",phone:\"18701445755\"},{id:21,name:\"小妾\",phone:\"18701445755\"}]";
            show(jsondata); 
           }
          </script>
          </head>
          <body bgcolor="#000000" text="#FFFFFF" style="margin:0 0 0 0" onload="javascript:init()">
          //partner4java.personlist()">
           <table border="0" width="100%" id="personTable" cellspacing="0">
            <tr>
             <td width="15%">編號</td><td align="center">姓名</td><td width="15%">電話</td>
            </tr>
           </table>

          </body>
          </html>

          如上,是我們html里面的基本用法,但是我們需要改變這里面的數據提供方式

          修改main.xml:

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

          你可以把webView看做嵌入你程序的瀏覽器:

          package cn.partner4java.html;

          import java.util.ArrayList;
          import java.util.List;

          import org.json.JSONArray;
          import org.json.JSONException;
          import org.json.JSONObject;

          import cn.partner4java.html.bean.Contact;

          import android.app.Activity;
          import android.os.Bundle;
          import android.os.Handler;
          import android.webkit.WebView;

          public class MainActivity extends Activity {
           private WebView webView;
           //我們用它來完成我們的異步調用 ,當我new這個對象出來,它會綁定到當前
           //activity消息隊列里去,如果發現它里面新建了Runnable,它就會新建一個線程去。。。
           private Handler handler = new Handler();
           @Override
              public void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.main);
                  webView = (WebView) this.findViewById(R.id.webView);
                  //支持javaScript
                  webView.getSettings().setJavaScriptEnabled(true);
                  //不保存表單數據
                  webView.getSettings().setSaveFormData(false);
                  //不保存密碼
                  webView.getSettings().setSavePassword(false);
                  //不支持頁面放大功能
                  webView.getSettings().setSupportZoom(false);
                //addJavascriptInterface方法中要綁定的Java對象及方法要運行在另外的線程中,不能運行在構造他的線程中
                  //也就是說不能運行在當前的activity線程中
                  //就是把這個方法綁定到頁面中,js也可以調用
                  //docment:xxx()
                  //partner4java:xxx()
                  webView.addJavascriptInterface(new Partner4javaJavaScript(), "partner4java");
                  //把我們的頁面顯示出來
                  webView.loadUrl("file:///android_asset/index.html");
                  
              }
           
           private final class Partner4javaJavaScript{
            /**
             * 獲取所有聯系人
             */
            public void getContacts(){
             handler.post(new Runnable() {
              @Override
              public void run() {
               //可以通過訪問SQLite訪問數據庫獲取
               List<Contact> contacts = new ArrayList<Contact>();
               contacts.add(new Contact(12, "王昌龍", "18701445755"));
               contacts.add(new Contact(13, "小妾", "18701445755"));
               webView.loadUrl("javascript:show('"+ buildJson(contacts) +"')");
              }
             });
             
            }
            
            /**
             * 生成Json格式的數據
             * @param contacts
             * @return
             */
            private String buildJson(List<Contact> contacts){
             try {
              JSONArray jsonArray = new JSONArray();
              for(Contact contact:contacts){
               JSONObject jsonObject = new JSONObject();
               jsonObject.put("id", contact.getId());
               jsonObject.put("name", contact.getName());
               jsonObject.put("phone", contact.getPhone());
               jsonArray.put(jsonObject);
              }
              return jsonArray.toString();
             } catch (JSONException e) {
              e.printStackTrace();
             }
             return null;
            }
            
           }
          }

          修改:

          onload="javascript:partner4java.getContacts()">

          然后加入回調方法:

          /**
             * 回調方法
             * @param phone
             */
            public void call(final String phone){
             handler.post(new Runnable() {
              @Override
              public void run() {
               startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+ phone)));
              }
             });
            }

          加入撥號權限:

          <uses-permission android:name="android.permission.CALL_PHONE" />

          還可以:

          webView.setWebChromeClient(new Partner4javaWebClient());

           

           

              private final class Partner4javaWebClient extends WebChromeClient{

                @Override

            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {

                new AlertDialog.Builder(HtmlActivity.this)

            .setTitle("提示信息")      

            .setMessage(message)          

            .setPositiveButton("確定", new DialogInterface.OnClickListener(){

                  public void onClick(DialogInterface dialoginterface, int i){}

            }).show();

            return true;

            }

              }



          ---------------------------------------------------------
          專注移動開發

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2010-05-21 20:57 TiGERTiAN 閱讀(2149) 評論(0)  編輯  收藏 所屬分類: Android
          主站蜘蛛池模板: 青海省| 九龙坡区| 筠连县| 山东省| 双鸭山市| 永吉县| 鄂托克旗| 班玛县| 农安县| 吉隆县| 绍兴市| 石首市| 黄龙县| 广宗县| 汽车| 东乌珠穆沁旗| 鄂伦春自治旗| 苍南县| 崇义县| 璧山县| 昌宁县| 红河县| 邵阳县| 朝阳县| 航空| 元阳县| 定南县| 友谊县| 行唐县| 攀枝花市| 呼玛县| 中江县| 融水| 团风县| 会泽县| 隆化县| 常德市| 炉霍县| 阜新| 神池县| 蒙城县|