日期:2014-05-17  浏览次数:20757 次

利用HTML5开发Android笔记(下篇)

?

资源来自于www.mhtml5.com 杨丰盛老师成都场的PPT分享 一个很简明的demo 可以作为入门基础

学习的过程中做了点笔记 整理如下 虽然内容比较简单 但是数量还是比较多的 所以分了3篇

(上)包括Android设备多分辨率的问题,Android中构建HTML5应用程序基础

(中)包括Android与JS之间的互动,Android处理JS的警告对话框等,Android中的调试

(下)包括本地储存在Android中的应用,地理位置的应用,离线应用的构建

—————————————————————————————— 分割线 ————————————————————————————————————————

进入正题

● HTML5本地存储在Android中的应用

HTML5提供了2种客户端存储数据新方法

localStorage 没有时间限制

sessionStorage 针对一个Session的数据存储

?

	<script type="text/javascript"> 
		localStorage.lastname="Smith"; 
		document.write(localStorage.lastname); 
	</script> 
	<script type="text/javascript"> 
		sessionStorage.lastname="Smith"; 
		document.write(sessionStorage.lastname);
	</script> 

?

WebStorage的API:

?

	//清空storage
	localStorage.clear();
	//设置一个键值
	localStorage.setItem(“yarin”,“yangfegnsheng”);
	//获取一个键值
	localStorage.getItem(“yarin”); 
	//获取指定下标的键的名称(如同Array)
	localStorage.key(0); 
	//return “fresh” //删除一个键值
	localStorage.removeItem(“yarin”);
	注意一定要在设置中开启哦
	setDomStorageEnabled(true)

?

Android中进行操作

?

	//启用数据库
	webSettings.setDatabaseEnabled(true);  
	String dir = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
	//设置数据库路径
	webSettings.setDatabasePath(dir);
	//使用localStorage则必须打开
	webSettings.setDomStorageEnabled(true);
	//扩充数据库的容量(在WebChromeClinet中实现)
	public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, 
			long estimatedSize, long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
		quotaUpdater.updateQuota(estimatedSize * 2);
	}
?

?

JS中按常规进行数据库操作

?

	function initDatabase() {
	try {
	    if (!window.openDatabase) {
	        alert('Databases are not supported by your browser');
	    } else {
	        var shortName = 'YARINDB';
	        var version = '1.0';
	        var displayName = 'yarin db';
	        var maxSize = 100000; // in bytes
	        YARINDB = openDatabase(shortName, version, displayName, maxSize);
			createTables();
			selectAll();
	    }
	} catch(e) {
	    if (e == 2) {
	        // Version mismatch.
	        console.log("Invalid database version.");
	    } else {
	        console.log("Unknown error "+ e +".");
	    }
	    return;
	} 
	}

	function createTables(){
		YARINDB.transaction(
			function (transaction) {
				transaction.executeSql('CREATE TABLE IF NOT EXISTS yarin(id INTEGER NOT NULL PRIMARY KEY, name TEXT NOT NULL,desc TEXT NOT NULL);', [], nullDataHandler, errorHandler);
			}
		);
		insertData();
	}

	function insertData(){
		YARINDB.transaction(
			function (transaction) {
			//Starter data when page is initialized
			var data = ['1','yarin yang','I am yarin'];  
			
			transaction.executeSql("INSERT INTO yarin(id, name, desc) VALUES (?, ?, ?)", [data[0], data[1], data[2]]);
			}
		);	
	}

	function errorHandler(transaction, error){
		if (error.code==1){
			// DB Table already exists
		} else {
			// Error is a human-readable string.
			console.log('Oops.  Error was '+error.message+' (Code '+error.code+')');
		}
		return false;
	}


	function nullDataHandler(){
		console.log("SQL Query Succeeded");
	}

	function selectAll(){ 
		YARINDB.transaction(
			function (transaction) {
				transaction.executeSql("SELECT * FROM yarin;", [], dataSelectHandler, errorHandler);
			}
		);	
	}

	function dataSelectHandler(transaction, results){
		// Handle the results
		for (