方法openOrCreateDatabase(String,int,null)未定义

时间:2010-08-15 18:25:32

标签: android

我正在尝试按如下方式打开数据库:

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

当我在Service类中实现它时,此代码工作正常,但是当我尝试在GeneraterThread类的onPostExecute事件处理程序中实现它,实现AsyncTask时,我收到以下错误:

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

4 个答案:

答案 0 :(得分:5)

看起来你正试图在没有方法的GeneraterThread实例上调用openOrCreateDatabase方法(而Service类有方法)。您可能可以传入对Context对象的引用并在其上调用该方法。或者使用SQLiteDatabase.openOrCreateDatabase()的静态方法。

答案 1 :(得分: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

答案 2 :(得分:1)

将它与您的父类一起使用

类似

myService.this.openOrCreateDatabase

答案 3 :(得分:0)

最好使用它,

db = SQLiteDatabase.openOrCreateDatabase(DATABASE_PATH_AND_NAME, null);
db.close();
db = SQLiteDatabase.openDatabase(DATABASE_PATH_AND_NAME, null, Context.MODE_APPEND);