2014-04-05 29 views
0

我正在使用searchView來獲取查詢以使用字符串搜索數據庫,遊標不返回爲空但是爲空。搜索SQLite數據庫返回空遊標

呼叫從我的搜索活動搜索(這是實現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的Databasetaking搜索方法從方法的字符串上面的查詢:

/* 
    * 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 else代碼在此處執行時返回空遊標:

else if(!cursor.moveToFirst()){ 
       cursor.close(); 
       return null; 

任何輸入讚賞! 夏蘭

+1

嘗試'String selection = database.KEY_TESTNAME +「LIKE?」; String [] selectionArgs = new String [] {「%」+ query +「%」};'只是爲了知道問題出在哪裏 – Tarun

回答

0

明白了,看來我傳遞錯誤的參數給curosr.rawQuery()。 我經過一個裁判數據庫輔助對象getReadableDB電話:

Cursor cursor = builder.query(mDatabaseOpenHelper.getReadableDatabase(), 
      columns, selection, selectionArgs, null, null, null); 

當我更換此參數與數據庫對象它工作得很好:

SQLiteDatabase ourDataBase = ourDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 

Cursor cursor = builder.query(ourDataBase, columns, selection, selectionArgs, null, null, null); 

中規定的培訓文件通過前mDatabaseOpenHelper.getReadableDatabase ()但這似乎不起作用,不是原因。 http://developer.android.com/training/search/search.html

2

,而不是這樣的:

if(cursor == null){ 
    return null; 
}else if(!cursor.moveToFirst()){ 
cursor.close(); 
    return null; 
} 

return cursor; 


使用本:

if(cursor == null){ 
    return null; 
}else{ 
    cursor.moveToFirst(); 
} 

return cursor; 
+0

嘗試了兩種方法,不斷得到一個0行和13列的遊標。在Debugger中查看遊標時,我看到SQLiteQuery:SELECT * FROM tests where(name LIKE?)。當使用此遊標設置ListAdpter時,將顯示整個數據庫.. – dancingbush

+0

儘管從搜索中返回新遊標,但在我使用新遊標的新適配器調用setListAdpter(adp)後,nCreate()方法似乎是再次調用,因此使用遊標捐助所有結果來調用原始Adpter – dancingbush

+1

如果您檢索0行,以便您的查詢錯誤,或者您沒有正確選擇項目。確保你的選擇查詢是正確的。 –