我正在使用SQLiteAssetHelper库来处理我的App数据库操作,它几乎适用于我测试过的所有手机.但是,当打开数据库的调用时,一些使用Android 2.3.3 - 2.3.7的用户会报告崩溃.我怀疑这是由于第一次从资产文件夹中复制数据库时出现了一些问题(例如内部存储空间不足).
助手班:
public class DbHelper extends SQLiteAssetHelper {
final static String DB_NAME="db";
static final int DB_VERSION = 1307181213;
final Context context;
public DbHelper(Context c) {
super(c, DB_NAME, null, DB_VERSION);
this.context = c;
setForcedUpgradeVersion(DB_VERSION);
}
}
Run Code Online (Sandbox Code Playgroud)
处理程序类(如果无法打开db,我会在10秒后将计数器设置为超时):
public class DbHandlerDao {
private SQLiteDatabase database;
private DbHelper dbHelper;
public DbHandlerDao(Context context) {
dbHelper = new DbHelper(context);
}
public void open() throws SQLException {
boolean opened = false;
int timeout = 0;
while (!opened && timeout < 10000) {
try …Run Code Online (Sandbox Code Playgroud) 我的数据库出了问题.当应用程序启动时,它应该创建带有表的数据库(如果它们不存在),但应用程序在启动后立即崩溃.当我打开logcat后关闭数据库告诉我"我想打开一个已经关闭的对象",当我没有关闭数据库时,我得到错误" getReadableDatabase called recursively".我不知道该怎么做.有时它可以工作,但是当我取消应用程序并再次安装它们时,错误就会出现.
没有关闭的错误:
02-20 11:50:06.980: E/AndroidRuntime(15375): FATAL EXCEPTION: main
02-20 11:50:06.980: E/AndroidRuntime(15375): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.vertretungsplan2/de.vertretungsplan2.Main}: java.lang.IllegalStateException: getDatabase called recursively
02-20 11:50:06.980: E/AndroidRuntime(15375): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)
02-20 11:50:06.980: E/AndroidRuntime(15375): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389)
02-20 11:50:06.980: E/AndroidRuntime(15375): at android.app.ActivityThread.access$600(ActivityThread.java:153)
02-20 11:50:06.980: E/AndroidRuntime(15375): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1269)
02-20 11:50:06.980: E/AndroidRuntime(15375): at android.os.Handler.dispatchMessage(Handler.java:99)
02-20 11:50:06.980: E/AndroidRuntime(15375): at android.os.Looper.loop(Looper.java:137)
02-20 11:50:06.980: E/AndroidRuntime(15375): at android.app.ActivityThread.main(ActivityThread.java:5289)
02-20 11:50:06.980: E/AndroidRuntime(15375): at java.lang.reflect.Method.invokeNative(Native Method)
02-20 11:50:06.980: E/AndroidRuntime(15375): at java.lang.reflect.Method.invoke(Method.java:525)
02-20 11:50:06.980: E/AndroidRuntime(15375): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
02-20 11:50:06.980: E/AndroidRuntime(15375): at …Run Code Online (Sandbox Code Playgroud)