过滤后光标未关闭

时间:2012-04-21 20:29:55

标签: android filter android-cursoradapter

我正在尝试使用自定义CursorAdapter和ContentProvider为数据库条目列表实现过滤器函数。代码实际上按预期工作,但会导致警告,在某些情况下甚至会出错。在CursorAdapter中,我覆盖 runQueryOnBackgroundThread 执行过滤并返回游标:

@Override
public Cursor runQueryOnBackgroundThread(CharSequence constraint) {

  if (getFilterQueryProvider() != null) {
    return getFilterQueryProvider().runQuery(constraint);
  }

  if (constraint == null || constraint.length() == 0) {
    return context.getContentResolver().query(DBContentProvider.URI_LOGS, null,
        LRMDatabase.LogTable.TYPE + " >= " + this.filterType, null, sqlOrder);
  } else {
    return context.getContentResolver().query(
        DBContentProvider.URI_LOGS, null,
        LRMDatabase.LogTable.TYPE + " >= " + this.filterType  + " AND " +
        LRMDatabase.LogTable.MSG + " LIKE '%" + constraint.toString() + "%'", null,
        this.sqlOrder);
  }
}

在我的相应活动中,我在oder中使用了 TextWatcher 来过滤数据集:

private TextWatcher filterTextWatcher = new TextWatcher() {
  public void afterTextChanged(Editable s) {    
  }

  public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  }

  public void onTextChanged(CharSequence s, int start, int before, int count) {
    adapter.getFilter().filter(s);
  }
};

我现在的问题是,每当我之前调用 onTextChanged (否则一切正常)然后从我的活动返回时,我会显示过滤后的数据集,我会收到类似“< em>检测到未闭合光标“或甚至是”完成尚未停用或关闭的光标“之类的错误。任何想法为什么会这样?

我知道我请求一个初始游标来显示未过滤的列表,并且从我的活动返回后应该关闭这个游标(这似乎有效)。我也知道,除了我的过滤请求,我创建了一个新的游标 - 根据ANDROID developers reference - 应该在从 runQueryOnBackgroundThread 返回后使用旧游标进行交换,从而旧的游标应该是关闭。出于某种原因,这似乎出错了!

0 个答案:

没有答案