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()とtoの呼び出しの両方setFilterQueryProvider()が同じクラスにある場合は、省略できます。this.

dataAdapter.setFilterQueryProvider(new FilterQueryProvider() {
                  public Cursor runQuery(CharSequence constraint) {
                      return fetchDataByName(constraint.toString());
                  }
于 2013-03-25T09:42:36.147 に答える
0

現在のオブジェクトを参照しているため、wont helpを使用する匿名クラス内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 に答える