热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

androidwebkit案例,移动互联网时代Android上的一个例子

我们来演示一个获取联系人,并用网页展现出来的简单例子。首先,我们在eclipse环境中创建一个Androidproject,我们的Acti

我们来演示一个获取联系人,并用网页展现出来的简单例子。

首先,我们在eclipse环境中创建一个Android project,我们的Activity名称是com.example.RIAExample,并且修改界面的layout文件如下:

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png    android:orientation="vertical"4f1150b881333f12a311ae9ef34da474.png    android:layout_width="fill_parent"4f1150b881333f12a311ae9ef34da474.png    android:layout_height="fill_parent"4f1150b881333f12a311ae9ef34da474.png>4f1150b881333f12a311ae9ef34da474.png android:layout_width="fill_parent"android:layout_height="fill_parent">4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

可以看到,界面中仅仅包含一个WebView控件。

接下来,创建一个简单的java类来描述一个联系人的信息,它包含联系人姓名和号码。

4f1150b881333f12a311ae9ef34da474.pngpackagecom.example;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimportjava.util.Vector;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimportandroid.app.Activity;

4f1150b881333f12a311ae9ef34da474.pngimportandroid.os.Bundle;

4f1150b881333f12a311ae9ef34da474.pngimportandroid.webkit.WebView;

4f1150b881333f12a311ae9ef34da474.png

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicclassRIAExampleextendsActivity9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png    

d18c02628675d0a2c816449d98bda930.pngprivateWebView web;

d18c02628675d0a2c816449d98bda930.png    

d18c02628675d0a2c816449d98bda930.png//模拟号码簿d18c02628675d0a2c816449d98bda930.pngprivateVectorphonebook=newVector();

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif/** *//**Called when the activity is first created.*/d18c02628675d0a2c816449d98bda930.png    @Override

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicvoidonCreate(Bundle savedInstanceState)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngsuper.onCreate(savedInstanceState);

d18c02628675d0a2c816449d98bda930.png        setContentView(R.layout.main);

d18c02628675d0a2c816449d98bda930.pngthis.initContacts();

d18c02628675d0a2c816449d98bda930.png        web=(WebView)this.findViewById(R.id.web);

d18c02628675d0a2c816449d98bda930.png        web.getSettings().setJavascriptEnabled(true);//开启Javascript设置,否则WebView不执行js脚本d18c02628675d0a2c816449d98bda930.pngweb.addJavascriptInterface(this,"phonebook");//把RIAExample的一个实例添加到js的全局对象window中,

d18c02628675d0a2c816449d98bda930.png//这样就可以使用window.phonebook来调用它的方法d18c02628675d0a2c816449d98bda930.pngweb.loadUrl("file:///android_asset/phonebook.html");//加载网页d18c02628675d0a2c816449d98bda930.pngecedf933ec37d714bd4c2545da43add2.png    }d18c02628675d0a2c816449d98bda930.png    

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif/** *//**d18c02628675d0a2c816449d98bda930.png     * 该方法将在js脚本中,通过window.phonebook.getContacts()进行调用

d18c02628675d0a2c816449d98bda930.png     * 返回的JavaArrayJSWrapper对象可以使得在js中访问Java数组

d18c02628675d0a2c816449d98bda930.png     *@returnecedf933ec37d714bd4c2545da43add2.png*/97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicJavaArrayJSWrapper getContacts()9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png        System.out.println("fetching contacts data");

d18c02628675d0a2c816449d98bda930.png        Person[] a=newPerson[this.phonebook.size()];

d18c02628675d0a2c816449d98bda930.png        a=this.phonebook.toArray(a);

d18c02628675d0a2c816449d98bda930.pngreturnnewJavaArrayJSWrapper(a);

d18c02628675d0a2c816449d98bda930.png    

ecedf933ec37d714bd4c2545da43add2.png    }d18c02628675d0a2c816449d98bda930.png    

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif/** *//**d18c02628675d0a2c816449d98bda930.png     * 初始化电话号码簿

ecedf933ec37d714bd4c2545da43add2.png*/97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicvoidinitContacts()9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png        Person p=newPerson();

d18c02628675d0a2c816449d98bda930.png        p.name="Perter";

d18c02628675d0a2c816449d98bda930.png        p.phone_number="8888888";

d18c02628675d0a2c816449d98bda930.png        phonebook.add(p);

d18c02628675d0a2c816449d98bda930.png        p=newPerson();

d18c02628675d0a2c816449d98bda930.png        p.name="Jack";

d18c02628675d0a2c816449d98bda930.png        p.phone_number="777777";

d18c02628675d0a2c816449d98bda930.png        phonebook.add(p);

d18c02628675d0a2c816449d98bda930.png       

ecedf933ec37d714bd4c2545da43add2.png    }d18c02628675d0a2c816449d98bda930.png    

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif/** *//**d18c02628675d0a2c816449d98bda930.png     * 通过window.phonebook.debugout来输出js调试信息。

d18c02628675d0a2c816449d98bda930.png     *@paraminfo

ecedf933ec37d714bd4c2545da43add2.png*/97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicvoiddebugout(String info)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png        

d18c02628675d0a2c816449d98bda930.png        System.out.println(info);

ecedf933ec37d714bd4c2545da43add2.png    }8f1ba5b45633e9678d1db480c16cae3f.png}

下面是html文件,它非常简单。

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif9b8a8a44dd1c74ae49c20a7cd451974e.pngd18c02628675d0a2c816449d98bda930.pngd18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png
d18c02628675d0a2c816449d98bda930.png

thisis a demo

d18c02628675d0a2c816449d98bda930.png
d18c02628675d0a2c816449d98bda930.pngd18c02628675d0a2c816449d98bda930.pngd18c02628675d0a2c816449d98bda930.png

而主角就是我们的Javascript脚本fetchcontacts.js

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifwindow.οnlοad=function()9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png    window.phonebook.debugout("inside js onload");//调用RIAExample.debugoutd18c02628675d0a2c816449d98bda930.pngvarpersons=window.phonebook.getContacts();//调用RIAExample.getContacts()97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifif(persons)9b8a8a44dd1c74ae49c20a7cd451974e.png{//persons实际上是JavaArrayJSWrapper对象d18c02628675d0a2c816449d98bda930.pngwindow.phonebook.debugout(persons.length()+"of contact entries are fetched");

d18c02628675d0a2c816449d98bda930.pngvarcontactsE=document.getElementById("contacts");

d18c02628675d0a2c816449d98bda930.pngvari=0; 

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifwhile(i{//persons.length()调用JavaArrayJSWrapper.length()方法d18c02628675d0a2c816449d98bda930.pngd18c02628675d0a2c816449d98bda930.png            pnode=document.createElement("p");

d18c02628675d0a2c816449d98bda930.png            tnode=document.createTextNode("name :"+persons.get(i).getName()+"number :"+persons.get(i).getNumber());//persons.get(i)获得Person对象,然后在js里面直接调用getName()和getNumber()获取姓名和号码d18c02628675d0a2c816449d98bda930.pngpnode.appendChild(tnode);

d18c02628675d0a2c816449d98bda930.png            contactsE.appendChild(pnode);

d18c02628675d0a2c816449d98bda930.png            i++;

ecedf933ec37d714bd4c2545da43add2.png        }97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif    }else9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png        window.phonebook.debugout("persons is undefined");

ecedf933ec37d714bd4c2545da43add2.png    }d18c02628675d0a2c816449d98bda930.png    

8f1ba5b45633e9678d1db480c16cae3f.png}

例子很简单,我加了注释希望有助大家理解,其他我就不深入解释了。

我把例子的源代码放上来,你可以下来试一试。

这个例子说明通过WebView.addJavascriptInterface方法,我们可以扩展Javascript的API,获取Android的数据。这样,JS的粉丝就可以使用Dojo,JQuery,Prototy等这些知名的js框架来搭建android应用程序来展现它们很酷很玄的效果!但是,目前addJavascriptInterface还不够灵活强大,为什么呢?敬请关注第四篇“what next?”

posted on 2009-03-14 16:16 勤劳的蜜蜂 阅读(5367) 评论(6)  编辑  收藏



推荐阅读
author-avatar
66代码
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有