一般项目中我们把db文件放到assert或者raw目录下面,在程序第一次启动的时候复制到私有目录下面
在使用过程中,老是发现复制不成功,私有目录下的db文件总是3072
后来发现应该是使用ContentProvider的原因,它会先创建一个空的db。
而我的程序在复制数据库的时候会判断私有目录下是否有数据库文件,如果有则不复制。
现在改为用SharedPreferences一个字段判断是否第一次复制。
第一次复制数据库的时候就算私有目录下有db文件,也删除。
这样就ok了
代码如下:
public class CopyDataActivity extends Activity{
boolean needCopy = false;
SharedPreferences mSP = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.copy_data);
mSP = getSharedPreferences(Constants.PREFERENCES_NAME, MODE_PRIVATE);
needCopy = mSP.getBoolean("need_copy_data", true);
if(needCopy){
handler.post(copyPlanThread);
}else{
goToMain();
}
}
private void goToMain(){
mSP.edit().putBoolean("need_copy_data", false).commit();
startActivity(new Intent(CopyDataActivity.this,LoginActivity.class));
this.finish();
}
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int what = msg.what;
int arg1 = msg.arg1;
if(what==1){
//这里可以在页面显示复制进度什么的
Log.e("Copy","复制大小:"+arg1);
}else{
goToMain();
mSP.edit().putBoolean("need_copy_data", false).commit();
}
}
};
Runnable copyPlanThread = new Runnable() {
@Override
public void run() {
try{
copyDatabase();
}catch(Exception e){
e.printStackTrace();
}
}
};
private void copyDatabase() throws Exception{
Log.e("Copy","copy start");
File dbfile = new File(getFilesDir().getAbsolutePath() +File.separator+ "mydb.db";
File dir = dbfile.getParentFile();
if(dir.exists() == false){
dir.mkdirs();
}
//把contentprovider生成的db删除
if(dbfile.exists()){
dbfile.delete();
}
InputStream is = this.getResources().openRawResource(R.raw.library);
FileOutputStream fos = new FileOutputStream( dbfile);
byte[] buffer =new byte[1024];
int size = 0;
int length = 0; //字节
while( (length= is.read(buffer)) > 0){
fos.write(buffer,0,length);
size += length;
Message msg = new Message();
msg.what = 1;
msg.arg1 = size;
handler.sendMessage(msg);
}
fos.flush();
fos.close();
is.close();
Log.e("Copy","copy end");
Message msg = new Message();
msg.what = 0;
msg.arg1 = 0;
handler.sendMessage(msg);
}
}
- 大小: 14.3 KB
分享到:
相关推荐
浏览性软件要求实现数据库文件和源代码一起发布,需要把数据库文件放在资源目录,程序第一次运行时先把数据库文件复制到sd卡或者内存中。
自己做的一个android数据库复制到sdcard和一个简单的角标使用,demo很简陋.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android studio源码,记事本,可做备忘录 纯安卓项目本地数据库sqlite ...项目包含 源码+apk文件+演示视频 ...它是Android应用程序常用的本地数据库解决方案,可用于存储和管理应用程序的数据。 3. 登录注册功能:登录注
使用已经写好的全国城市SQLite,将其放在raw下,程序再将数据库复制到手机文件夹下,查询数据库,使用spinner实现三级联查询。
cordova-plugin-dbcopy, 将SQLite数据库从www文件夹复制到默认应用程序数据库位置 cordova-plugin-dbcopy在你的phonegap/cordova Android和iOS应用程序中添加一个预填充的SQLite数据库。重要升级说明位置已经在...
本demo实现了程序启动时,从assets文件夹中复制sqlite文件到程序的功能,里面带了一个sqlite查看工具,sqlite分割工具,详细说明文档。...程序启动后,Log会输出结果,也可以使用adb shell进行查看数据库是否复制成功。
ADB(Android Debug Bridge)是一个用于与Android设备通信的命令行工具。它提供了许多功能,用于开发、调试和管理Android设备。...导出和导入数据库:ADB允许您从设备导出应用程序的数据库,并将其导
库提供了快速的主-主复制,可将任何Android移动设备上的应用程序数据库与远程PostgreSQL数据库同步。 远程数据库充当中间人,它始终可用并有助于同步。 特征 快速地 易于使用 自动解决冲突 最小的数据库使用限制 ...
copy复制 cut剪切 paste粘贴 delete删除 select选择 find查找 select all全选 replace替换 undo撤消 redo重做 program程序 license许可(证) back前一步 next下一步 finish结束 folder文件夹 ...
adb 实用程序支持一些可选命令行参数,以提供强大的特性,例如复制文件到设备或从设备复制文件。可以使用 shell 命令行参数连接到手机本身,并发送基本的 shell 命令。图 4 显示在通过 USB 线连接到 Windows 笔记本...
从Kakaotalk的Android应用程序的本地数据库解密聊天记录。 用法 打印解密的聊天记录: $ ./kakaodecrypt.py -p KakaoTalk.db ... 将chat_logs表解密为新的chat_logs_dec表: $ ./kakaodecrypt.py KakaoTalk.db #...
Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 ...
搜索 Android平台内建的Demo App,连接本地sqlite数据库并管理其中的数据。 开始时,如果移动文件管理器中不存在数据库,则应用程序已准备好在设备中进行本地复制并正常工作,只是在屏幕上显示数据。
去百度下,软件叫Navicat Premium,不是for mysql)然后复制MySQL里面表,粘贴到SQLite里面,再导出为db文件(自行百度,有空写教程),再在Android Studio里面用代码读取db文件生成数据库即可。本资源是通过我根据...
29、访问数据库SQLite3 adb shell sqlite3 #cd system/sd/data //进入系统内指定文件夹 #ls //列表显示当前文件夹内容 #rm -r xxx //删除名字为xxx的文件夹及其里面的所有文件 #rm xxx //删除文件xxx #...
Wiki-Farm-Android 带有 OracleDB 数据库的简单基于 android 的应用程序将 HarvestService 文件夹复制到 htdocs
Firebase基础架构(数据库、身份验证、存储、分析等) 发送/接收/读取指标,实时更新 打字/记录指标与实时更新 轻松复制/转发/共享/删除邮件 上次查看和在线状态更新 远程删除邮件 即使您离线也可以工作! 搜索特定...
关于简介受直接支持iOS应用程序捆绑中的只读数据库并以Android SQLite资产辅助工具中的思想为蓝本的目的,该库的目的是帮助解决在Android中使用Realm.io时发现的一些常见任务。 它由Egghead Games积极维护和使用
使用 Android 应用程序上的“ORMLite 库”管理 sqlite 数据库的独立类。 特征 - Create, insert, select, update, delete objects - Use EQUAL, NOTEQUAL, LIKE, NOTLIKE operators in conditions (WHERE statement...
文档内容不能复制, 介意者请慎下. 大部分内容可在http://blog.csdn.net/xieyan0811上看到 文档目录如下 1 系统配置 1 1.1 建立SDK开发环境 2 1.2 Android源码的编译 6 1.3 编译在G1上运行的android 2.1(eclair)...