热门标签 | 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)  编辑  收藏



推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
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社区 版权所有