无法完成从 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());
正如主题中所述,我对 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());