Android 无法对非静态方法错误进行静态引用

Android 无法对非静态方法错误进行静态引用,android,listview,binding,sqliteopenhelper,Android,Listview,Binding,Sqliteopenhelper,我从我的代码中得到以下错误 '无法对非静态方法进行静态引用 getReadableDatabase(),来自类型SQLiteOpenHelper' 在Database.java文件中。如果我使用Eclipse来解决这个错误,那么在favoriteScreen.java文件中就会发生错误。有人知道怎么解决吗 收藏夹屏幕.java 及 Database.java 问题是,您试图在静态方法中使用非静态方法。getReadableDatabase()也应该是静态的,因为这应该可以工作。错误在于您正在做一

我从我的代码中得到以下错误

'无法对非静态方法进行静态引用 getReadableDatabase(),来自类型SQLiteOpenHelper'

Database.java
文件中。如果我使用Eclipse来解决这个错误,那么在
favoriteScreen.java
文件中就会发生错误。有人知道怎么解决吗

收藏夹屏幕.java

Database.java


问题是,您试图在静态方法中使用非静态方法。
getReadableDatabase()
也应该是静态的,因为这应该可以工作。

错误在于您正在做一些不允许的事情!解决方案:

  • getReadableDatabase()
    的所有代码放入函数中,确保不调用非静态函数

  • 使
    getReadableDatabase()
    静态

  • 使
    getReadableDatabase()
    非静态,并更改对其的调用方式:

    Database database = new Database();
    Cursor listCursor = database.GetFavouritesList();
    
  • getReadableDatabase()
    是一个实例方法,而不是类方法。您需要一个实例,例如:

    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;
    }
    

    静态
    光标
    ,嗯,是为了什么?我建议您使用静态方法来获取dbhelper(单例设计模式)的实例,而不是
    Cursor
    。这听起来像是不正确的指定应用程序逻辑。
    Database database = new Database();
    Cursor listCursor = database.GetFavouritesList();
    
    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;
    }