2013-05-04 76 views
0

因此,我有一個名爲DatabaseHandler的類繼承SQLiteOpenHelper。這個班負責管理將數據從聯機數據庫複製到手機的數據庫。現在,問題在於,當我調用它的getQuestionsCount()方法時,它正如名稱所示,計算項目的數量,它會崩潰。它在調用其getReadableDatabase()方法的線路上崩潰。它告訴我它有一個IllegalStateException。這是怎麼回事?在Android中打開SQLite數據庫時出現非法狀態異常

關於崩潰活動的代碼。檢查是否已經存儲的使用問題:

DatabaseHandler db = new DatabaseHandler(getApplicationContext()); 

if(db.getQuestionsCount() == 0) 
    if(!isNetworkAvailable() || !canConnectToServer()) 
     return -2; 
else 
    if(!isNetworkAvailable() || !canConnectToServer()) 
     return -3; 

部分我的數據庫處理器類:在的onCreate(

public class DatabaseHandler extends SQLiteOpenHelper 
{ 
... 
    public DatabaseHandler(Context context) 
    { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
    ... 

    @Override 
    public void onCreate(SQLiteDatabase db) 
    { 
     String CREATE_QUESTIONS_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_QUESTIONS + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," + KEY_QUESTION + " TEXT NOT NULL," 
      + KEY_CATEGORY + " INTEGER NOT NULL," + KEY_ANSWER_1 + " TEXT NOT NULL," 
      + KEY_ANSWER_2 + " TEXT NOT NULL," + KEY_ANSWER_3 + " TEXT NOT NULL," 
      + KEY_ANSWER_4 + " TEXT NOT NULL," + KEY_DATE_POSTED + " TEXT NOT NULL)"; 
     db.execSQL(CREATE_QUESTIONS_TABLE); 

     db.close(); 
    } 
    ... 

    public int getQuestionsCount() 
    { 
     String countQuery = "SELECT * FROM " + TABLE_QUESTIONS; 
     SQLiteDatabase db = this.getReadableDatabase(); //<-- ERROR ON THIS LINE 
     Cursor cursor = db.rawQuery(countQuery, null); 
     int count = cursor.getCount(); 
     cursor.close(); 

     // return count 
     return count; 
    } 
} 

回答

1

刪除db.close)

@Override 
public void onCreate(SQLiteDatabase db) 
{ 
    String CREATE_QUESTIONS_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_QUESTIONS + "(" 
     + KEY_ID + " INTEGER PRIMARY KEY," + KEY_QUESTION + " TEXT NOT NULL," 
     + KEY_CATEGORY + " INTEGER NOT NULL," + KEY_ANSWER_1 + " TEXT NOT NULL," 
     + KEY_ANSWER_2 + " TEXT NOT NULL," + KEY_ANSWER_3 + " TEXT NOT NULL," 
     + KEY_ANSWER_4 + " TEXT NOT NULL," + KEY_DATE_POSTED + " TEXT NOT NULL)"; 
    db.execSQL(CREATE_QUESTIONS_TABLE); 
} 

你的光標之前關閉返回

public int getQuestionsCount() 
{ 
    String countQuery = "SELECT * FROM " + TABLE_QUESTIONS; 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(countQuery, null); 
    int count = cursor.getCount(); 
    cursor.close(); 

    return count; 
} 
+0

謝謝,it pr可能會在以後導致一個錯誤仍然,但仍然有一個錯誤,說'SQLiteDatabase db = this.getReadableDatabase();'這就是錯誤來自 – rdelfin 2013-05-04 00:35:29

+0

我改變了問題。謝謝! – rdelfin 2013-05-04 00:37:23

+0

我編輯了答案。 – 2013-05-04 00:40:25