我已经阅读了很多关于将数据库文件从资产或原始文件夹复制到文件夹的帖子/data/data/APP/databases
,但这会在设备上留下两个DB副本占用宝贵的空间.我正在考虑构建一个占用空间略小的解决方案,并通过将数据库SQL创建文本文件存储在原始文件夹中并使用on_create / on_update
DBhelper类中的标准流程来实现更灵活的模式管理.但是我有点困惑,因为复制数据库的示例绕过了on_create and on_update
方法.
如果您不是从代码中的字符串构建db,这是推荐的方法吗?
我的解决方案是通过将脚本全部放在一个文件中来模拟代码方法中运行的脚本.我正在考虑以这种方式构建数据库的原因是,当应用程序完成时,我的数据库将有近100个表,所以我需要架构是可管理的.
欢迎任何指导,因为我仍在学习Android的最佳实践和模式.
这是我的代码示例:
public class DatabaseHelper extends SQLiteOpenHelper {
private final String DATABASE_NAME = "mydb";
private final int DATABASE_VERSION = 1;
private final Context myCtx;
private String DATABASE_CREATE_SCRIPT = null;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
DATABASE_CREATE_SCRIPT = getLoadFile();
// Create all tables and populate the lookup tables
db.execSQL(DATABASE_CREATE_SCRIPT);
db.execSQL(VIEW_CREATE_V_PERSON);
}
private String getLoadFile(){
InputStream inputStream = myCtx.getResources().openRawResource(resIdofmyfile);
InputStreamReader …
Run Code Online (Sandbox Code Playgroud) 我实现ListFragment
从ViewPager
和使用ListAdapter
扩展SimpleCursorAdapter
,并试图我是在转换之前使用相同的持有人格局保持到使用LoaderManager
自定义光标和CommonsWare.loaderex
JAR.一切似乎很好地融合在一起,除了我放在LoaderManager
上面ListFragment
而不是FragmentActivity
托管中ViewPager
.主要是因为我不知道所需的回调来加载/刷新的数据从列表中FragmentActivity
,我想,以避免内存具有了一个巨大的光标,因为整体形式已经遍及所有的碎片的许多领域ViewPager
.让表单的每个部分在自己的Loader中管理自己的数据似乎没问题.
当我构建类似于演示项目的Adapter Init设置时(请参阅下面的代码片段)
private void initList() {
getHelper();
adapter=new PhoneNumberListAdapter(getActivity(), R.layout.phonenumber_row, null, null, null);
setListAdapter(adapter);
getSupportLoaderManager().initLoader(0, null, getActivity());
}
Run Code Online (Sandbox Code Playgroud)
该getSupportLoaderManager()
标志为一个错误,我想不通为什么.这是片段的完整代码(我知道它是一个蹩脚的电话号码管理器).对我做错的任何指导都会很棒.
package com.code.android.myproject
import java.util.ArrayList;
import java.util.List;
import com.commonsware.cwac.loaderex.acl.SQLiteCursorLoader;
import android.support.v4.app.ListFragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import android.widget.SimpleCursorAdapter;
import android.content.Intent;
import android.app.AlertDialog;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.database.Cursor;
import android.view.ContextMenu;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu; …
Run Code Online (Sandbox Code Playgroud)