2010-08-15 11 views
6

Ich versuche Datenbank zu öffnen, wie folgt:Die Methode openOrCreateDatabase (String, int, null) ist nicht definiert

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

Dieser Code funktioniert gut, wenn ich es in der Service-Klasse implementieren, aber wenn ich versuche, implementieren diese in der OnPostExecute Eventhandler der GeneraterThread Klasse, Implementierung AsyncTask, ich die folgende Fehlermeldung erhalten:

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

Antwort

5

Es ist wie Sie openOrCreateDatabase Methode auf GeneraterThread Instanz aufrufen, die nicht das Verfahren (und Service-Klasse hat die Methode) sind versucht aussieht. Sie können wahrscheinlich einen Verweis auf ein Context-Objekt übergeben und die Methode darauf aufrufen. Oder verwenden Sie die statische Methode von SQLiteDatabase.openOrCreateDatabase().

1

Verwenden sie es mit Ihren Eltern Klasse

so etwas wie

myService.this.openOrCreateDatabase 
5

Es sieht aus wie Sie nur falsche Argumente für die Funktion gesetzt haben.

Es gibt diese Definitionen 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) 

Aber Ihr Aufruf dieser Funktion ist falsch.

Vielleicht wollten Sie openDatabase (String path, SQLiteDatabase.CursorFactory factory, int flags) anrufen?

In diesem Fall, dass Sie nur Argumente in falscher Reihenfolge gesetzt - Sie tun

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

statt:

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

Ich habe eine Tonne Beispiele Online wie hier zu sehen: http: // sree.cc/google/android/creating-sqlite-database-tables-in-android wobei openOrCreateDatabase genauso aufgerufen wird wie Saurabh Verma es nennt. Die Online-Dokumentation zeigt jedoch nur diese drei Versionen. Ich bin verwirrt. – tronman

+2

Ich habe gerade entdeckt, dass es zwei verschiedene Möglichkeiten gibt, auf openOrCreateDatabase zuzugreifen ... über den Kontext http://developer.android.com/reference/android/content/Context.html, der openOrCreateDatabase anbietet (String name, int mode, SQLiteDatabase.CursorFactory) Factory) und über SQLiteDatabase http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html, die die oben beschriebenen Methoden von Igor bietet. – tronman

+2

Beachten Sie jedoch, dass der Parameter "int flags" in SQLiteDatabase.openDatabase (String-Pfad, SQLiteDatabase.CursorFactory factory, int-Flags) in der Kontextmethode openOrCreateDatabase (String-Name, int-Modus, SQLiteDatabase.CursorFactory-Factory) nicht dem "int-Modus" entspricht. – Anke

Verwandte Themen