以下代码是我的dbhandler中的一个函数。这在Android工作室模拟器上工作正常但在我的实际移动设备上崩溃。如果我注释掉SQLiteDatabase db = this.getWritableDatabase();
行,那么它可以正常工作。什么会导致这个?
public ArrayList<Integer> getCategories(int ParID){
ArrayList<Integer> catAr = new ArrayList<Integer>();
catAr.add(1);
//loop thru all cats and store id's in catAr
String query = "Select * FROM " + TABLE_PRODUCTS;
SQLiteDatabase db = this.getWritableDatabase();
db.close();
return catAr;
}
答案 0 :(得分:1)
请确认数据库是否存在。如docs中所述,如果无法打开数据库进行写入,则此方法可能会抛出SQLiteException。
另外请将此方法用于try / catch块中,以便更容易调试并优雅地失败而不会使应用程序崩溃。
答案 1 :(得分:0)
您可以更改数据库,并在模拟器中从旧版本读取。如果您更改数据库版本(在自定义SQLiteOpenHelper
类中),那么您可能也会在模拟器中看到该错误:
super(context, DB_NAME, null, DB_VERSION);
例如,将DB_VERSION从1更改为2.