文档章节

Android版添加phonegap--Sqlite实现离线功能技术教程

大街小巷
 大街小巷
发布于 2015/12/31 10:28
字数 978
阅读 25
收藏 1

一、建立Phonegap环境
1) 在Phonegap官网下载Phonegap最新版本的开发包Phonegap1.9.0

2) 创建Android项目,将Phonegap1.9.0包中的XML文件夹拷进项目中的res文件夹
里,在文件夹asset中建立文件夹www,并把cordova-1.9.0.js拷进www文件夹中。

3)在工程中加入corvoda-1.9.0.jar,通过buildpath导入工程中。

4)在AndroidManifest.xml里加入以下代码:      
<supports-screens
android:largeScreens="true"         
android:normalScreens="true"         
android:smallScreens="true"         
android:xlargeScreens="true"         
android:resizeable="true"         
android:anyDensity="true"/>

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.RECORD_VIDEO"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>    
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.BROADCAST_STICKY"/>  

5)把src中的Activity改成继承DroidGap,setContextView()改成
super.loadUrl("file:///android_asset/www/index.html")
并在www文件夹建立index.html文件,在html文件中导入cordova-1.9.0.js
<script type="text/javascript" charset="utf-8" src="cordova-1.9.0.js"></script>
完成以上步骤,Phonegap环境配置成功。
 
二、通过ajax请求服务器获取JSON数据
//通过ajax请求服务器取得数据
function request(){    
//建立一个XMLHttpRequest对象      
var xmlhttp;
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
}else{     
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}   
xmlhttp.open("GET","http://10.108.1.113:8080/PassengerService/servlet/mServlet",true);  
xmlhttp.send();
xmlhttp.onreadystatechange=function(){   
if (xmlhttp.readyState==4 && xmlhttp.status==200){          
var result=xmlhttp.responseText;          
var shu=parserJSON(result);         
}else{  
window.plugins.simpleplugin.selectDB();
        }
       }
 }
xmlhttp.onreadystatechange=function(){   
if(xmlhttp.readyState==4 && xmlhttp.status==200){          
var result=xmlhttp.responseText;          
var shu=parserJSON(result);         
}else{  
window.plugins.simpleplugin.selectDB();
}
       }
       }

三、解析JSON数据
@param JSONdata //传入要解析的JSON数据格式的字符串
function parserJSON(JSONdata){  
var JSONobj=eval('('+JSONdata+')');
//window.plugins为引用插件。调用插件simpleplugin的insertDB方法,解析JSON的同时插入进数据库中    
for(var i=0;i<JSONobj.passengers.length;i++){
window.plugins.simpleplugin.insertDB(JSONobj.passengers.length,'Passengers', JSONobj.passengers[i].passenger_id,      
JSONobj.passengers[i].passenger_name,      
JSONobj.passengers[i].icon_url,          
JSONobj.passengers[i].job);  
}
}

四、离线功能:离线功能是指把从服务器获得的数据保存进数据库中。在不能使用网络的情况下,能从数据库取出数据,达到离线功能。
1)调用Phonegap的api,制作数据库插件。新建SimplePlugin.js文件
Phonegap.addConstructor(function(){  
Phonegap.addPlugin('simpleplugin', new SimplePlugin());
});
//插件名为simpleplugin,在html文件中调用插件语句为window.plugins.simpleplugin。当调用插件时,自动创建SimplePlugin的对象,并能调用该对象的方法。  

2) 编写插件里的方法  
db.transaction(populateDB,successCB,errorCB);
var SimplePlugin = function(){
};  
SimplePlugin.prototype.createDB = function(table_name){
Var db=window.openDatabase("db_amberlo", "1.0", "Cordova Demo", 200000); db.transaction(
function CreateDB(tx){    
tx.executeSql('CREATE TABLE IF NOT EXISTS '+table_name+    
'(passenger_id INTEGER primary key AUTOINCREMENT,'+
'passenger_name varchar(20), '+ 'icon_url varchar(50), '+'job varchar(20))');
},
errorCB, successCB);
};  
var count=0;
var nowNum=0;  
SimplePlugin.prototype.insertDB=
function(num,table_name,passenger_id,passenger_name,icon_url,job){  
var db=window.openDatabase("db_amberlo", "1.0", "Cordova Demo", 200000); nowNum=num;  
db.transaction(function queryID(tx){
tx.executeSql('SELECT passenger_id FROM Passengers where passenger_id='+passenger_id,[],function queryFinish(tx,result){     
var len2 = result.rows.length;
if(len2==0){  
db.transaction(
function InsertDB(tx){   
count++;  
tx.executeSql('INSERT INTO '+table_name
+'(passenger_name,icon_url,job)VALUES ("'+ passenger_name+'","'  
+job + '")');
},errorCB, successCB_show);
  }
},errorCB);
},errorCB);
};
SimplePlugin.prototype.selectDB=function(){  
var db=window.openDatabase("db_amberlo", "1.0", "Cordova Demo", 200000); db.transaction(queryDB,errorCB);
}
function queryDB(tx){  
tx.executeSql('SELECT * FROM Passengers', [],querySuccess,errorCB);
}    
var total=document.getElementById("ul_first");
var image=new Array();  
var h33=new   Array();  
var p11=new   Array();  
var p22=new   Array();
for(var i=0;i<results.rows.length;i++){   
var li=document.createElement("li");  
total.appendChild(li);  
var a=document.createElement("a");
a.setAttribute("href","#");
var img=document.createElement("img");   
image[i]=img;
image[i].src="file:///android_asset/www/passenger-1.0.1/female.PNG";    
var h3=document.createElement("h3");   
h33[i]=h3;
h33[i].innerHTML= results.rows.item(i).position+"&nbsp;&nbsp;"
+results.rows.item(i).passenger_name
+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"+results.rows.item(i).company;    
p1=document.createElement("p");   
p11[i]=p1;
p11[i].innerHTML=
results.rows.item(i).card_kind+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"+results.rows.item(i).job;    
var p2=document.createElement("p");   
p22[i]=p2;
p22[i].innerHTML="旅客职位:" + results.rows.item(i).job;    
li.appendChild(a);   
a.appendChild(img);   
a.appendChild(h3);
a.appendChild(p1);
a.appendChild(p2);
$('ul').listview('refresh');

KeyMob移动广告平台为应用开发者提供高效稳定的移动广告SDK,支持主流智能手机操作系统,拥有插屏、全屏广告、视频广告等丰富广告形式,帮助应用开发者将流量快速转化为广告收入。










© 著作权归作者所有

大街小巷
粉丝 8
博文 208
码字总数 130367
作品 0
长沙
私信 提问
jQuery Mobile + PhoneGap的Android应用怎么调试

环境:eclipse3.6/adt18/sdk4.0/jqm1.2/phonegap2.1/jquery1.8/chrome/safari 我现在使用jqm+phonegap开发一个android应用 在本地用jqm写好页面代码用浏览器调试好,然后用jsonp跨域请求数据...

atearsan
2012/10/19
7.1K
5
【CF 应用开发大赛】APS移动分享社区

应用名称:APS移动分享社区 应用URL地址:http://apsshare.sdapp.cn/ 应用说明及使用场景: 很小巧的移动版CMS,可用于做个人博客,阅读网站,CMS,论坛等移动客户端,体积小,速度快,自适应...

tangc
2013/01/14
0
1
使用 Jo 和 PhoneGap 构建本地移动应用程序

移动应用程序开发正在飞速发展;一部分原因是出现了可以简化开发的新框架,这种新框架也使传统 web 开发人员可以更快上手。本文将介绍如何利用您已经掌握的 HTML、CSS 和 JavaScript 技能和两...

IBMdW
2012/03/27
1K
0
Android组件及UI框架大全

Android 是目前最流行的移动操作系统(还需要加之一吗?)。 随着新版本的不断发布, Android的功能也日益强大, 涌现了很多流行的应用程序, 也催生了一大批的优秀的组件。 本文试图将目前流行...

千山万水
2015/07/13
0
0
Android组件及UI框架大全

Android 是目前最流行的移动操作系统(还需要加之一吗?)。 随着新版本的不断发布, Android的功能也日益强大, 涌现了很多流行的应用程序, 也催生了一大批的优秀的组件。 本文试图将目前流行...

千山万水
2015/07/13
0
4

没有更多内容

加载失败,请刷新页面

加载更多

策略模式

策略模式封装的是算法,而状态模式侧重的对象状态的转变。 /** * 策略,定义计算报价算法的接口 */public interface Strategy { /** * 计算应报的价格 * @param goo...

铁骨铮铮
51分钟前
0
0
如何用JavaScript写一个区块链?

Part1实现一个基本的区块链 1.区块链 区块链是由一个个任何人都可以访问的区块构成的公共数据库。这好像没什么特别的,不过它们有一个有趣的属性:它们是不可变的。一旦一个区块被添加到区块...

骚年锦时
54分钟前
1
0
HTTP协议

HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 HTTP是一个基于TCP/IP通信协议...

惊尘大人
56分钟前
1
0
Feign输出Info级别日志

背景   spring cloud netfix组件中,feign相关的日志默认是不会输出的,需要自定义配置才能输出,并且Feign只对Debug基本的日志做出响应, 实际业务需要输出Info级别的日志,所以需要做自定...

xiaomin0322
今天
3
0
面向解决问题的java编程,spring boot,mybatis generator和坑-1starter

1、start一个spring boot项目 第一课我们也不能免俗,要从starter开始,spring boot的起始项目脚手架可以从spring boot官方starter生成地址开始:https://start.spring.io/ 这张图列出了一个...

wphmoon
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部