当安装应用程序时,如何使用merriam字典(离线词典)这样的字典,这些字词是否立即出现,并且不需要时间将单词和定义列表插入数据库?我是初学者,目前正在开发一个包含大约30K字的Android应用程序,它需要大约15分钟以上才能将所有数据插入到数据库中,然后用户才能搜索该特定数据。我正在寻找一种可以解决这个问题的方法。有人可以告诉我一种方法吗?
谢谢
答案 0 :(得分:1)
我的猜测是这些应用程序正在使用已经SQLite数据库,并且已经填充了所需的所有数据。 您可以使用以下内容将填充的数据库导入应用程序:
公共类DataBaseAdapter {
String DB_NAME = "DBNAME.db";
String DIR = "/data/data/packageName/databases/";
String DB_PATH = DIR + DB_NAME;
private DataBaseHelper mDbHelper;
private SQLiteDatabase db;
private Context context;
public DataBaseAdapter(Context context) {
this.context = context;
mDbHelper = new DataBaseHelper(this.context);
}
class DataBaseHelper extends SQLiteOpenHelper {
private boolean createDatabase = false;
@SuppressWarnings("unused")
private boolean upgradeDatabase = false;
Context context;
public DataBaseHelper(Context context) {
super(context, DB_NAME, null, 1);
this.context = context;
}
public void initializeDataBase() {
getWritableDatabase();
if (createDatabase) {
try {
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
private void copyDataBase() throws IOException {
InputStream input = context.getAssets().open(DB_NAME);
OutputStream output = new FileOutputStream(DB_PATH);
byte[] buffer = new byte[1024];
int length;
try {
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
}
finally {
try {
if (output != null) {
try {
output.flush();
} finally {
output.close();
}
}
} finally {
if (input != null) {
input.close();
}
}
}
getWritableDatabase().close();
}
public void onCreate(SQLiteDatabase db) {
createDatabase = true;
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
upgradeDatabase = true;
}
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
}
}
public DataBaseAdapter open() {
mDbHelper.initializeDataBase();
if (db == null)
db = mDbHelper.getWritableDatabase();
return this;
}
public void close() {
db.close();
}
}
然后你可以添加从数据库中获取数据的方法,这个类可以在你的活动中使用,通过调用open然后获取数据然后关闭。
答案 1 :(得分:0)
您的应用程序应包含预先填充的数据库,以便在安装时进行脱机访问。这将避免每个用户必须在他们的设备上运行INSERT步骤。
是否有特殊原因需要在安装后运行INSERTS?