【问题标题】:Cannot make a static reference to the non-static method error无法对非静态方法进行静态引用错误
【发布时间】:2013-03-31 20:10:15
【问题描述】:

我的代码出现以下错误

'不能对非静态方法进行静态引用 getReadableDatabase() 从类型 SQLiteOpenHelper'

Database.java 文件中。如果我使用 Eclipse 来解决错误,那么FavouriteScreen.java 文件中就会出现错误。谁知道怎么解决?

FavoritesScreen.java

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

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

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

【问题讨论】:

  • static Cursor,嗯,天哪?我建议您宁愿使用静态方法来获取 dbhelper(单例设计模式)的实例,而不是 Cursor。这听起来像是不正确的指定应用逻辑。

标签: android listview binding sqliteopenhelper


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    2. getReadableDatabase()设为静态。

    3. getReadableDatabase() 设为非静态并更改您的称呼方式:

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

    【讨论】:

      【解决方案3】:

      getReadableDatabase()instance 方法,而不是 class 方法。你需要一个实例,例如:

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

      【讨论】:

        猜你喜欢
        • 2019-07-13
        • 1970-01-01
        • 2011-06-25
        • 2023-04-02
        • 2013-06-30
        相关资源
        最近更新 更多