无法完成从 class 到数据库适配器中的非静态方法的静态引用

static reference from class to non-static method in data base adapter can't be done

正如主题中所述,我对 android 还是个新手。我正在学习一些关于过滤文本的教程,但在完成 eclipse 后给了我这个错误:

Cannot make a static reference to the non-static method tchCountriesByName(String) from the type DBAdapter

我正在查看其他示例,但找不到与我的案例相匹配的地方。

  myCursorAdapter.setFilterQueryProvider(new FilterQueryProvider() {
         public Cursor runQuery(CharSequence constraint) {
             return new DBAdapter(list.this).fetchCountriesByName(constraint.toString()); //here's the error
         }
     });
 }

这里是它所指的方法。我试着把 "static" 放在代码的任何地方,但我仍然无法工作。

 public Cursor fetchCountriesByName(String inputText) {
      Log.w(TAG, inputText);
      Cursor c = null;
      if (inputText == null  ||  inputText.length () == 0)  {
       c = db.query(DATABASE_TABLE, new String[] {KEY_ROWID,
         KEY_NAME, KEY_COUNTRY, KEY_REGION},
         null, null, null, null, null);

      }
      else {
      c = db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
         KEY_NAME, KEY_COUNTRY, KEY_REGION},
         KEY_NAME + " like '%" + inputText + "%'", null,
         null, null, null, null);
      }
      if (c != null) {
       c.moveToFirst();
      }
      return c;

     }

感谢您的意见。

你可以制作fetchCountriesByName()方法static

public static Cursor fetchCountriesByName(String inputText) {
  // your method implementation
}

然后你必须在该方法中使用所有变量static

所以 easy option 是创建一个 class 的 instance 并调用你的 method.

例如:

 public Cursor runQuery(CharSequence constraint) {
    return new DBAdapter().fetchCountriesByName(constraint.toString()); 
 }

重要的一点是你应该知道什么地方应该使用 static 什么地方不应该?使 static 没有意义可能会导致问题。

编辑:看来您是 Java 的新手。当您创建 DBAdapter 的实例时,不应使用 new DBAdapter() 的参数构造函数。否则你应该选择正确的 constructor of DBAdapter.

要么使用您的 DBAdapter 实例,要么将 fetchCountriesByName 设为静态。

尝试:

return new DBAdapter().fetchCountriesByName(constraint.toString());

而不是:

 return DBAdapter.fetchCountriesByName(constraint.toString());