2012-05-25 33 views
0

考慮下面的代碼在我活動的onCreate:SQLiteDatabase提前跳過?

 super.onCreate(savedInstanceState); 

     setContentView(R.layout.logmenu); 

     //DEBUG CODE 
     new DBAdaptor(this).dropDatabase(); 

     if (!DBAdaptor.checkDataBase()) { 
      showDialog(DIALOG_NO_DB); 
     } 


     seasonSpinner = (Spinner) findViewById(R.id.seasonspinner); 

     List<String> seasons = new ArrayList<String>(); 
     SQLiteDatabase db = new DBAdaptor(this).getReadableDatabase(); 


     /* //Select _key FROM seasons; 
     Cursor results = db.query("seasons", new String[] {"_key"}, null, null, null, null, null); 
     results.moveToFirst(); 
     do { 
      String season = results.getString(results.getColumnIndex("_key")); 
      seasons.add(season); 
     } while (results.moveToNext());*/ 

如果我運行如圖所示,與部分填充註釋掉的微調,會發生以下情況:

  1. 視圖渲染。無形中,最後一次運行的數據庫被刪除,因此下一次檢查將失敗
  2. 彈出一個對話框,詢問是否要初始化數據庫。我點擊是。
  3. 數據庫初始化運行(涉及與遠程服務器通信)
  4. 現在,數據庫填充和準備使用
  5. 控制返回到該圖中,用空微調所有寂寞。

如果我取消註釋該塊,但是,這些步驟都不會運行。相反,我得到一個SQLiteException:「沒有這樣的表格:季節:,而編譯時:SELECT_key FROM seasons」

爲什麼步驟1-5不會發生?爲什麼它在我準備好之前先跳過並嘗試編譯該查詢?我如何防止這種情況並強制它按順序執行?

回答

1

我認爲你的問題是你創建的對話框並沒有阻塞剩下的方法,所以你仍然試圖在用戶可以告訴應用程序(通過對話框)創建數據庫。

+0

一個可靠的猜測。我可能會將數據庫檢查放入單獨的活動中。 – Yamikuronue