2010-08-15 9 views
6

Sto cercando di aprire il database come segue:Il metodo openOrCreateDatabase (String, int, null) non è definito

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

Questo codice funziona bene quando a implementare nella classe di servizio, ma quando provo a implementare questo nel EventHandler OnPostExecute della classe GeneraterThread, attuazione AsyncTask, ottengo il seguente errore:

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

risposta

5

Sembra che si sta cercando di richiamare il metodo openOrCreateDatabase su istanza GeneraterThread che non ha il metodo (e la classe di servizio ha il metodo). Probabilmente potresti passare un riferimento a un oggetto Context e invocare il metodo su di esso. O utilizzare il metodo statico di SQLiteDatabase.openOrCreateDatabase().

1

uso con i tuoi classe genitore

qualcosa come

myService.this.openOrCreateDatabase 
5

Sembra che abbiate appena impostato argomenti errati per la funzione.

ci sono queste definizioni in 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) 

Ma la vostra chiamando quella funzione è sbagliato.

Forse volevi chiamare openDatabase (String path, SQLiteDatabase.CursorFactory factory, int flags)?

In questo caso è sufficiente impostare argomenti in ordine sbagliato - si sta facendo

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

invece:

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

Ho visto un sacco di esempi online come qui: http: // sree.cc/google/android/creating-sqlite-database-tables-in-android dove openOrCreateDatabase è chiamato proprio come Saurabh Verma lo sta chiamando. Tuttavia, la documentazione online mostra solo queste tre versioni. Non ho capito bene. – tronman

+2

Ho appena scoperto che ci sono due diversi modi di accedere a OpenOrCreateDatabase ... attraverso il contesto http://developer.android.com/reference/android/content/Context.html che offre openOrCreateDatabase (Nome stringa, modalità int, SQLiteDatabase.CursorFactory fabbrica) e tramite SQLiteDatabase http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html che offre i metodi descritti sopra da Igor. – tronman

+2

Si noti che il parametro "int flags" in SQLiteDatabase.openDatabase (percorso String, SQLiteDatabase.CursorFactory factory, int flags) non è equivalente a "modalità int" nel metodo Context openOrCreateDatabase (nome String, modalità int, factory SQLiteDatabase.CursorFactory). – Anke

Problemi correlati