Android 通过WebView 调用Js sqlite数据库
js里面写好的数据库我想用在Android上、不多说直接来源码、
这个是Android 代码 这里面的布局只是个Webview
package com.example.fyapp.db;
import com.example.fyapp.R;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebStorage.QuotaUpdater;
public class WebViewActivity extends Activity {
private WebView webView;
@SuppressLint({ "SetJavaScriptEnabled", "JavascriptInterface" })
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sqlwebviwe);
webView = (WebView) findViewById(R.id.sqlsq);
String dir=this.getApplicationContext().getDir("contactdb", Context.MODE_PRIVATE).getPath();
webView = new WebView(this);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDatabaseEnabled(true);
settings.setDatabasePath(dir);
webView.loadUrl("file:///android_asset/newsqlite.html");
setContentView(webView);
//这个方法必须要写、不是js数据库直接无响应
webView.setWebChromeClient(new WebChromeClient(){
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
// TODO Auto-generated method stub
return super.onJsAlert(view, url, message, result);
}
@Override
public void onExceededDatabaseQuota(String url,
String databaseIdentifier, long quota,
long estimatedDatabaseSize, long totalQuota,
QuotaUpdater quotaUpdater) {
// TODO Auto-generated method stub
quotaUpdater.updateQuota(estimatedDatabaseSize*2);
}
});
webView.addJavascriptInterface(this, "fa");
}
protected void query(String view2) {
// TODO Auto-generated method stub
}
public class DemoJavaScriptInterface {
public DemoJavaScriptInterface() {
}
public int mydata() {
Log.i("TEST", "mydata.....");
return 0;
}
}
@Override
protected void onResume() {
if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
super.onResume();
}
@Override
// 设置回退
// 覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法
public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO
// Auto-generated
// method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (webView.canGoBack()) {
webView.goBack();// 返回上一页面
return true;
} else {
System.exit(0);// 退出程序
}
}
return super.onKeyDown(keyCode, event);
}
}
这个是html的代码 (这个是放在Android assets目录下的)
//注意这点的路径、放在Android assets目录下就直接写名字
js代码(这个是放在Android assets目录下的)
//打开数据库 这个是css代码(这个是放在Android assets目录下的) th {
var db = openDatabase('contactdb','','local database demo',204800);
//保存数据
function save(){
var user_name = document.getElementById("user_name").value;
var mobilephone = document.getElementById("mobilephone").value;
var company = document.getElementById("company").value;
//创建时间
var time = new Date().getTime();
db.transaction(function(tx){
tx.executeSql('insert into contact values(?,?,?,?)',[user_name,mobilephone,company,time],onSuccess,onError);
});
}
//sql语句执行成功后执行的回调函数
function onSuccess(tx,rs){
alert("操作成功");
loadAll();
}
//sql语句执行失败后执行的回调函数
function onError(tx,error){
alert("操作失败,失败信息:"+ error.message);
}
//将所有存储在sqlLite数据库中的联系人全部取出来
function loadAll(){
var list = document.getElementById("list");
db.transaction(function(tx){
//如果数据表不存在,则创建数据表
tx.executeSql('create table if not exists contact(name text,phone text,company text,createtime INTEGER)',[]);
//查询所有联系人记录
tx.executeSql('select * from contact',[],function(tx,rs){
if(rs.rows.length>0){
var result = "";
result += " ";序号 姓名 手机 公司 添加时间 操作
for(var i=0;i
//转换时间,并格式化输出
var time = new Date();
time.setTime(row.createtime);
var timeStr = time.format("yyyy-MM-dd hh:mm:ss");
//拼装一个表格的行节点
result += " ";"+(i+1)+" "+row.name+" "+row.phone+" "+row.company+" "+timeStr+"
}
list.innerHTML = result;
}else{
list.innerHTML = "目前数据为空,赶紧开始加入联系人吧";
}
});
});
}
Date.prototype.format = function(format)
{
var o = {
"M+" : this.getMonth()+1, //month
"d+" : this.getDate(), //day
"h+" : this.getHours(), //hour
"m+" : this.getMinutes(), //minute
"s+" : this.getSeconds(), //second
"q+" : Math.floor((this.getMonth()+3)/3), //quarter
"S" : this.getMilliseconds() //millisecond
}
if(/(y+)/.test(format)) format=format.replace(RegExp.$1,
(this.getFullYear()+"").substr(4 - RegExp.$1.length));
for(var k in o)if(new RegExp("("+ k +")").test(format))
format = format.replace(RegExp.$1,
RegExp.$1.length==1 ? o[k] :
("00"+ o[k]).substr((""+ o[k]).length));
return format;
}
//删除联系人信息
function del(phone){
db.transaction(function(tx){
//注意这里需要显示的将传入的参数phone转变为字符串类型
tx.executeSql('delete from contact where phone=?',[String(phone)],onSuccess,onError);
});
}
font: bold 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
color: #4f6b72;
border-right: 1px solid #C1DAD7;
border-bottom: 1px solid #C1DAD7;
border-top: 1px solid #C1DAD7;
letter-spacing: 2px;
text-transform: uppercase;
text-align: left;
padding: 6px 6px 6px 12px;
}
td {
border-right: 1px solid #C9DAD7;
border-bottom: 1px solid #C9DAD7;
background: #fff;
padding: 6px 6px 6px 12px;
color: #4f6b72;
}更多相关文章
随机推荐