【发布时间】:2014-04-05 20:34:31
【问题描述】:
我正在使用 searchView 获取查询以使用字符串搜索数据库,光标不返回为 null 而是为空。
从我的搜索活动(实现 SearchView.OnQueryTextListener 的 ListActivity)中调用搜索:
@Override
public boolean onQueryTextChange(String newText) {
// TODO Auto-generated method stub
//handleIntent(intent);
Log.d("LIST ACTIVITY SEARCH", "onQueryTextCahanged called: "+ newText);
Cursor c = data.getWordMatches(newText, null);
Log.d("LISTACTIVITY", "CURSOR QUERY ROWS/COLS = "+ c.getCount()+" "+c.getColumnCount());
//now set bind cursor data to list view using custim ItemAdpter class
adapter = new ItemAdapter(ViewListOfTests.this, c);
this.setListAdapter(adapter);
return false;
}
SQLite 数据库中的搜索方法采用上述方法中的字符串查询:
/*
* methods to search database with String query form searchable widget intent
* in ViewListOfDives ListActivity search bar. Each search returns a cursor which is set to adpter
* in ViewListOfYesys List Activity
*/
public Cursor getWordMatches(String query, String[] columns){
String selection = database.KEY_TESTNAME + " MATCH ?";
String[] selectionArgs = new String[] {query+"*"}; //wildcard *
return query(selection, selectionArgs, columns);
}//end getWordMatches
private Cursor query(String selection, String[] selectionArgs,
String[] columns) {
// return cursor form params passed getWordMatches(Styring query) from search widget ListActivity
SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
builder.setTables(DATABASE_TABLE);
dbHelperObject = new DbHelper(ourContext);
Cursor cursor = builder.query(dbHelperObject.getReadableDatabase(), columns, selection, selectionArgs, null, null, null);
if(cursor == null){
return null;
}else if(!cursor.moveToFirst()){
cursor.close();
return null;
}
return cursor;
}//end query
这里执行的 else if 代码返回一个空光标:
else if(!cursor.moveToFirst()){
cursor.close();
return null;
任何意见表示赞赏! 夏兰
【问题讨论】:
-
尝试
String selection = database.KEY_TESTNAME + " LIKE ?"; String[] selectionArgs = new String[] {"%"+query+"%"};只是为了知道问题出在哪里