2013-04-09 3 views
1

Je reçois l'erreur suivante de mon codeImpossible de faire une référence statique à l'erreur de méthode non statique

« Impossible de faire une référence statique à la méthode non statique getReadableDatabase() à partir du type SQLiteOpenHelper '

dans le fichier Database.java. Si j'utilise Eclipse pour résoudre l'erreur, une erreur se produit dans le fichier FavouriteScreen.java. Quelqu'un sait comment le résoudre?

FavouritesScreen.java

// Get a Cursor for the list items 
Cursor listCursor = Database.GetFavouritesList(); 
startManagingCursor(listCursor); 

// set the custom list adapter 
setListAdapter(new MyListAdapter(this, listCursor)); 

et

Database.java

public static Cursor GetFavouritesList(){ 
try 
{ 
return(getReadableDatabase().rawQuery("SELECT SocietyName FROM Favourites",null)); 
} 
catch(SQLiteException e) 
{ 
Log.e("Favourites", e.toString()); 
} 
return null; 
} 
+0

statique 'Cursor', uhm, pour quel dieu de jésus? Je vous suggère plutôt d'utiliser une méthode statique pour obtenir l'instance de dbhelper (modèle de conception singleton) que 'Cursor'. Cela ressemble à une logique d'application désignée incorrecte. – Sajmon

Répondre

0

getReadableDatabase() est une méthode exemple, pas une méthode de classe. Vous avez besoin d'une instance, par exemple:

public static Cursor GetFavouritesList(SQLiteOpenHelper helper){ 
try 
{ 
return(helper.getReadableDatabase().rawQuery("SELECT SocietyName FROM Favourites",null)); 
} 
catch(SQLiteException e) 
{ 
Log.e("Favourites", e.toString()); 
} 
return null; 
} 
0

Le problème est que vous essayez d'utiliser un non statique méthode dans votre méthode statique. Le getReadableDatabase() devrait également être statique, pour que cela fonctionne.

2

L'erreur est que vous faites quelque chose qui n'est pas autorisé! Solutions:

  1. Mettez tout le code pour getReadableDatabase() dans la fonction étant sûr de ne pas appeler des fonctions non statiques.

  2. Rendre getReadableDatabase() statique.

  3. Marque getReadableDatabase() non-statique et changer la façon dont vous l'appelez:

    Database database = new Database(); 
    Cursor listCursor = database.GetFavouritesList(); 
    
Questions connexes