应用程序在this.getWritableDatabase()上崩溃;

时间:2015-12-11 21:51:29

标签: java android

以下代码是我的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;
}

2 个答案:

答案 0 :(得分:1)

请确认数据库是否存在。如docs中所述,如果无法打开数据库进行写入,则此方法可能会抛出SQLiteException。

另外请将此方法用于try / catch块中,以便更容易调试并优雅地失败而不会使应用程序崩溃。

答案 1 :(得分:0)

您可以更改数据库,并在模拟器中从旧版本读取。如果您更改数据库版本(在自定义SQLiteOpenHelper类中),那么您可能也会在模拟器中看到该错误:

   super(context, DB_NAME, null, DB_VERSION);
例如,

将DB_VERSION从1更改为2.