2010-08-15 80 views
6

我想如下打開數據庫:當我在服務類中實現它方法openOrCreateDatabase(字符串,整數,空)是未定義

SQLiteDatabase myDatabase; 
myDatabase = openOrCreateDatabase("sudoku.db", Context.MODE_PRIVATE, null); 

此代碼工作正常,但是當我嘗試在GeneraterThread類的onPostExecute事件處理程序實現這一點,執行的AsyncTask,我得到以下錯誤:

The method openOrCreateDatabase(String, int, null) is undefined for the type GeneraterThread

回答

5

它看起來像你想調用的GeneraterThread例如openOrCreateDatabase方法不具有方法(和服務類有方法)。您可能可能會傳入對Context對象的引用並調用其上的方法。或者使用SQLiteDatabase.openOrCreateDatabase()的靜態方法。

1

與父類使用它

myService.this.openOrCreateDatabase 
5

它看起來像你只是設置功能的錯誤論據。

有這些定義在SDK:

public static SQLiteDatabase openOrCreateDatabase (String path, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) 

public static SQLiteDatabase openOrCreateDatabase (String path, SQLiteDatabase.CursorFactory factory) 

public static SQLiteDatabase openOrCreateDatabase (File file, SQLiteDatabase.CursorFactory factory) 

但是你調用該函數是錯誤的。

也許你想打電話給openDatabase (String path, SQLiteDatabase.CursorFactory factory, int flags)

在這種情況下,您只需設置順序錯誤論點 - 你正在做

openOrCreateDatabase("sudoku.db", Context.MODE_PRIVATE, null); //WRONG 

代替:

openDatabase("sudoku.db", null, Context.MODE_PRIVATE); //RIGHT 
+1

我見過一噸的例子在網上喜歡這裏:HTTP:// sree.cc/google/android/creating-sqlite-database-tables-in-android其中openOrCreateDatabase被調用就像Saurabh Verma調用它一樣。但是,聯機文檔僅顯示這三個版本。我很困惑。 – tronman 2011-11-04 02:59:10

+2

我剛剛發現有兩種不同的方式訪問openOrCreateDatabase ...通過上下文http://developer.android.com/reference/android/content/Context.html,它提供了openOrCreateDatabase(String name,int mode,SQLiteDatabase.CursorFactory工廠),並通過SQLiteDatabase http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html,它提供了Igor上面描述的方法。 – tronman 2011-11-05 01:56:24

+2

但請注意SQLiteDatabase.openDatabase(String path,SQLiteDatabase.CursorFactory factory,int flags)中的參數「int flags」與上下文方法openOrCreateDatabase(String name,int mode,SQLiteDatabase.CursorFactory factory)中的「int mode」不等效。 – Anke 2012-03-22 11:48:12

相關問題