移动互联网时代--Android上的一个例子
来源:互联网 发布:软件在线制作 编辑:程序博客网 时间:2024/04/28 18:37
我们来演示一个获取联系人,并用网页展现出来的简单例子。
首先,我们在eclipse环境中创建一个Android project,我们的Activity名称是com.example.RIAExample,并且修改界面的layout文件如下:
<?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:id="@+id/web"
android:layout_width="fill_parent" android:layout_height="fill_parent">
</WebView>
</LinearLayout>
<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:id="@+id/web"
android:layout_width="fill_parent" android:layout_height="fill_parent">
</WebView>
</LinearLayout>
可以看到,界面中仅仅包含一个WebView控件。
接下来,创建一个简单的java类来描述一个联系人的信息,它包含联系人姓名和号码。
package com.example;
import java.util.Vector;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
public class RIAExample extends Activity {
private WebView web;
//模拟号码簿
private Vector<Person> phonebook = new Vector<Person>();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.initContacts();
web = (WebView)this.findViewById(R.id.web);
web.getSettings().setJavaScriptEnabled(true);//开启javascript设置,否则WebView不执行js脚本
web.addJavascriptInterface(this, "phonebook");//把RIAExample的一个实例添加到js的全局对象window中,
//这样就可以使用window.phonebook来调用它的方法
web.loadUrl("file:///android_asset/phonebook.html");//加载网页
}
/**
* 该方法将在js脚本中,通过window.phonebook.getContacts()进行调用
* 返回的JavaArrayJSWrapper对象可以使得在js中访问Java数组
* @return
*/
public JavaArrayJSWrapper getContacts(){
System.out.println("fetching contacts data");
Person[] a = new Person[this.phonebook.size()];
a = this.phonebook.toArray(a);
return new JavaArrayJSWrapper(a);
}
/**
* 初始化电话号码簿
*/
public void initContacts(){
Person p = new Person();
p.name = "Perter";
p.phone_number = "8888888";
phonebook.add(p);
p = new Person();
p.name = "Jack";
p.phone_number = "777777";
phonebook.add(p);
}
/**
* 通过window.phonebook.debugout来输出js调试信息。
* @param info
*/
public void debugout(String info){
System.out.println(info);
}
}
import java.util.Vector;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
public class RIAExample extends Activity {
private WebView web;
//模拟号码簿
private Vector<Person> phonebook = new Vector<Person>();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.initContacts();
web = (WebView)this.findViewById(R.id.web);
web.getSettings().setJavaScriptEnabled(true);//开启javascript设置,否则WebView不执行js脚本
web.addJavascriptInterface(this, "phonebook");//把RIAExample的一个实例添加到js的全局对象window中,
//这样就可以使用window.phonebook来调用它的方法
web.loadUrl("file:///android_asset/phonebook.html");//加载网页
}
/**
* 该方法将在js脚本中,通过window.phonebook.getContacts()进行调用
* 返回的JavaArrayJSWrapper对象可以使得在js中访问Java数组
* @return
*/
public JavaArrayJSWrapper getContacts(){
System.out.println("fetching contacts data");
Person[] a = new Person[this.phonebook.size()];
a = this.phonebook.toArray(a);
return new JavaArrayJSWrapper(a);
}
/**
* 初始化电话号码簿
*/
public void initContacts(){
Person p = new Person();
p.name = "Perter";
p.phone_number = "8888888";
phonebook.add(p);
p = new Person();
p.name = "Jack";
p.phone_number = "777777";
phonebook.add(p);
}
/**
* 通过window.phonebook.debugout来输出js调试信息。
* @param info
*/
public void debugout(String info){
System.out.println(info);
}
}
下面是html文件,它非常简单。
<html>
<head>
<script type="text/javascript" src="fetchcontacts.js"/>
</head>
<body>
<div id = "contacts">
<p> this is a demo </p>
</div>
</body>
</html>
<head>
<script type="text/javascript" src="fetchcontacts.js"/>
</head>
<body>
<div id = "contacts">
<p> this is a demo </p>
</div>
</body>
</html>
而主角就是我们的javascript脚本fetchcontacts.js
window.onload= function(){
window.phonebook.debugout("inside js onload");//调用RIAExample.debugout
var persons = window.phonebook.getContacts();//调用RIAExample.getContacts()
if(persons){//persons实际上是JavaArrayJSWrapper对象
window.phonebook.debugout(persons.length() + " of contact entries are fetched");
var contactsE = document.getElementById("contacts");
var i = 0;
while(i < persons.length()){//persons.length()调用JavaArrayJSWrapper.length()方法
pnode = document.createElement("p");
tnode = document.createTextNode("name : " + persons.get(i).getName() + " number : " + persons.get(i).getNumber());//persons.get(i)获得Person对象,然后在js里面直接调用getName()和getNumber()获取姓名和号码
pnode.appendChild(tnode);
contactsE.appendChild(pnode);
i ++;
}
}else{
window.phonebook.debugout("persons is undefined");
}
}
window.phonebook.debugout("inside js onload");//调用RIAExample.debugout
var persons = window.phonebook.getContacts();//调用RIAExample.getContacts()
if(persons){//persons实际上是JavaArrayJSWrapper对象
window.phonebook.debugout(persons.length() + " of contact entries are fetched");
var contactsE = document.getElementById("contacts");
var i = 0;
while(i < persons.length()){//persons.length()调用JavaArrayJSWrapper.length()方法
pnode = document.createElement("p");
tnode = document.createTextNode("name : " + persons.get(i).getName() + " number : " + persons.get(i).getNumber());//persons.get(i)获得Person对象,然后在js里面直接调用getName()和getNumber()获取姓名和号码
pnode.appendChild(tnode);
contactsE.appendChild(pnode);
i ++;
}
}else{
window.phonebook.debugout("persons is undefined");
}
}
例子很简单,我加了注释希望有助大家理解,其他我就不深入解释了。
我把例子的源代码放上来,你可以下来试一试。
RIADemo
这个例子说明通过WebView.addJavascriptInterface方法,我们可以扩展JavaScript的API,获取Android的数据。这样,JS的粉丝就可以使用Dojo,JQuery,Prototy等这些知名的js框架来搭建android应用程序来展现它们很酷很玄的效果!但是,目前addJavascriptInterface还不够灵活强大,为什么呢?敬请关注第四篇“what next?”
- 移动互联网时代--Android上的一个例子
- 移动互联网时代--Android上的一个例子
- 一个互联网的时代
- 移动互联网时代的商业模式
- 乔布斯的移动互联网时代
- 移动互联网时代的商业模式
- 移动互联网时代的特征
- 移动互联网时代的营销
- 移动互联网时代的风起云涌
- 移动互联网时代SEO走向死亡,一个新型的互联网在慢慢崛起
- 互联网时代是一个“打劫”的时代
- 3G时代运营商的移动互联网定位
- 浅议3G时代的移动互联网业务
- 移动互联网时代的“随手记”
- 移动互联网的跨平台时代
- 这个被移动互联网改变的时代
- 移动互联网时代的微信技术创新
- 移动互联网时代的消费群分析
- Java简单容器(集合)分类
- Android WebView的使用
- 【D3D学习记录】DrawIndexedPrimitive函数的详细解释
- vs2005先新建个解决方案,在添加类库项目,怎么总是类库不再解决方案下面
- 移动互联网时代--Android上的一个例子
- 移动互联网时代--Android上的一个例子
- 分页
- 迷茫
- 用工具测试代码质量
- 0x 颜色对应代码
- C++ 中如何用 vector类作为函数的参数
- iphone调用facebook相应的api
- CSS字体
- Java线程: 优先级