0

我有以下方法,它从数据库中获取数据

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

该错误似乎不言自明,但我不知道如何解决它。如何更新我的代码以获得我想要的行为?

4

2 回答 2

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());
                  }
于 2013-03-25T09:42:36.147 回答
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;
}
于 2013-03-25T09:44:18.407 回答