2010-08-15 10 views
6

Estoy tratando de abrir la base de datos de la siguiente manera:openOrCreateDatabase (String, int, null) no está definido

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

Este código funciona bien cuando implemente en la clase de servicio, pero cuando intento implementar esto en el manejador de sucesos onPostExecute de la clase GeneraterThread, implementar AsyncTask, me sale el siguiente error:

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

Respuesta

5

Parece que usted está tratando de invocar el método openOrCreateDatabase en la instancia GeneraterThread que no tiene el método (y la clase de servicio tiene el método). Probablemente pueda pasar una referencia a un objeto Contexto e invocar el método en él. O use el método estático de SQLiteDatabase.openOrCreateDatabase().

1

utilizarlo con su clase padre

algo así como

myService.this.openOrCreateDatabase 
5

Parece que usted acaba de configurar argumentos incorrectos para la función.

Hay estas definiciones en el 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) 

Sin embargo, su función es llamar a ese mal.

Tal vez usted quería llamar al openDatabase (String path, SQLiteDatabase.CursorFactory factory, int flags)?

En este caso que acaba de establecer argumentos en orden equivocado - que está haciendo

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

lugar:

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

que he visto un montón de ejemplos en línea como aquí: http: // sree.cc/google/android/creating-sqlite-database-tables-in-android donde se llama a openOrCreateDatabase tal como lo llama Saurabh Verma. Sin embargo, la documentación en línea solo muestra estas tres versiones. Estoy confundido. – tronman

+2

Acabo de descubrir que hay dos formas diferentes de acceder a openOrCreateDatabase ... a través del contexto http://developer.android.com/reference/android/content/Context.html que ofrece openOrCreateDatabase (String name, int mode, SQLiteDatabase.CursorFactory fábrica) y a través de SQLiteDatabase http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html que ofrece los métodos que Igor describe anteriormente. – tronman

+2

Pero tenga en cuenta que el parámetro "int flags" en SQLiteDatabase.openDatabase (String path, SQLiteDatabase.CursorFactory factory, int flags) no es equivalente a "int mode" en el método Context openOrCreateDatabase (String name, int mode, SQLiteDatabase.CursorFactory factory). – Anke