我有以下方法,从数据库中提取数据
public Cursor fetchDataByName(String inputText) throws SQLException {
Log.w(TAG, inputText);
Cursor mCursor = null;
if (inputText == null || inputText.length () == 0) {
mCursor = db.query(
.......
return mCursor;
}
我想在ListView中使用自定义适配器显示结果 但我的代码中有错误。
dataAdapter.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
return this.fetchDataByName(constraint.toString()); //error here
}
错误消息:
类型
的方法fetchDataByName(String)
new FilterQueryProvider
未定义
错误似乎很明显,但我无法弄清楚如何解决它。如何更新我的代码以获得我想要的行为?
答案 0 :(得分:0)
您已在某个数据库类中定义了fetchDataByName()
,但尝试将此方法称为FilterQueryProvider
的成员。如果要从runQuery()
访问它,则必须具有数据库类的实例
class DatabaseAdapter {
public Cursor fetchDataByName(String inputText) throws SQLException {
...
}
}
DatabaseAdapter adapter = ...;
dataAdapter.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
return adapter.fetchDataByName(constraint.toString());
}
如果方法fetchDataByName()
和对setFilterQueryProvider()
的调用都在同一个类中,您可以省略this.
dataAdapter.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
return fetchDataByName(constraint.toString());
}
答案 1 :(得分:0)
使用this
的匿名类内部不会有帮助,因为它引用了当前对象,因此您可以在不使用this
的情况下尝试
或
return OuterClassName.this.fetchDataByName(constraint.toString());
现在,由于fetchDataByName(String)
方法会引发SQLException
,因此您必须包含try catch
块,如下所示
public Cursor runQuery(CharSequence constraint) {
try{
return fetchDataByName(constraint.toString());
}catch (SQLException e){
e.printStackTrace();
}
return null;
}