支持HTML5 SqlLite的AndroidApp
简介:
想要建立一个支持HTML5的Android App;
这个HTML5的程序需要使用本地存储,特别是sqllite;
用eclipse创建了一个app,这个app默认在res/layout建了两个描述界面的xml文件,一个调用另一个,下面的代码基于这种情况;
package com.example.helloweb; import android.app.Activity; import android.app.ActionBar; import android.app.Fragment; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.os.Build; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebSettings; import android.webkit.WebStorage.QuotaUpdater; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 为了支持HTML5使用数据库(sqlite)的本地存储 String databasePath = getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath(); if (savedInstanceState == null) { PlaceholderFragment fragment = new PlaceholderFragment(); fragment.setDatabasePath(databasePath); getFragmentManager().beginTransaction() .add(R.id.container, fragment) .commit(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } /** * A placeholder fragment containing a simple view. * 被实例化,作为子UI的类 */ public static class PlaceholderFragment extends Fragment { String databasePath; public PlaceholderFragment() { } // 拿到MainActivity生成的数据库路径 public void setDatabasePath(String databasePath){ this.databasePath = databasePath; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); // 通过IDE在子UI里拖进去一个webView,所以这里从rootView里查找 WebView webView = (WebView)rootView.findViewById(R.id.webView1); webView.setWebChromeClient(this.makeWebChromeClient()); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setDatabaseEnabled(true); webSettings.setDatabasePath(this.databasePath); // 可以加载本地和网络的资源,加载网络资源需要配置权限 //webView.loadUrl("http://www.csdn.net/"); webView.loadUrl("file:///android_asset/demo.html"); return rootView; } private WebChromeClient makeWebChromeClient(){ return new WebChromeClient(){ @Override public void onExceededDatabaseQuota( String url, String databaseIdentifier, long currentQuota, long estimatedSize, long totalUsedQuota, QuotaUpdater quotaUpdater) { quotaUpdater.updateQuota(5 * 1024 * 1024); } }; } } }
配置app访问网络的权限(在AndroidManifest.xml文件里配置)
<?xml version="1.0" encoding="utf-8"?> <manifest> <uses-permission android:name="android.permission.INTERNET" />
<uses-sdk/> <application></application> </manifest>
如果要使用HTML5的localStorage还是要设置databasepath和打开localStorage
webSettings.setDatabasePath(this.databasePath); webSettings.setDomStorageEnabled(true);
分类:
Android开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
2014-01-06 批量杀死进程的脚本
2014-01-06 C语言:Message类
2014-01-06 状态机的c语言编程