2013-10-16 143 views
0

嗨,我只想更好地瞭解如何使用它。由於我在做自定義listView時使用這種方法,所以現在我想應用它,因爲我喜歡這個方法,但我不知道該怎麼做。無論如何,我有一個數據庫查詢,我從SQLite數據庫中的搜索查詢中獲得所有結果。現在我確定了我的查詢的內容,因爲我已經對它進行了測試,但是當我顯示它時,結果總是返回與查詢的最後一行相同的輸出。爲了更好地理解這裏是我的代碼:獲取ArrayList <HashMap <String,String >>的值用於顯示

public ArrayList<HashMap<String,String>> getList(String search_param){ 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>(); 
     HashMap<String,String> hashmap = new HashMap<String,String>(); 

     String query_select = "SELECT column1, column2 FROM tablename WHERE column2 LIKE '%"+ search_param +"%';"; 

     Cursor cursor = db.rawQuery(query_select,null); 
     if (cursor.moveToFirst()) { 
      do { 
       item_list.put("column1", cursor.getString(0)); 
       item_list.put("column2",cursor.getString(1)); 
       list.add(hashmap); 
      } while (cursor.moveToNext()); 
     } 
     cursor.close(); 

     return list; 
    } 

現在取回這裏的名單是我試過到目前爲止:

ArrayList<HashMap<String,String>> new_list; 
DatabaseClass db = new DatabaseClass(getActivity()); 

new_list = db.getList(""); 
for(int i=0;i<new_list.size();i++){ 
      HashMap<String,String> content = new HashMap<String, String>(); 
      content = new_list.get(i); 
      Log.v("The hashmap",content.get("column1").toString()); 
      Log.v("The hashmap",content.get("column2").toString()); 
     } 

現在我的數據庫的內容應該是1,2,3的列1和TEST1 ,test2,test3 for column2。但我從結果得到的是3,3,3和TEST3,TEST3,TEST3

我也想這樣做 newlist.get(i).get("column1").toString;的方法,但它甚至不解決問題。

關於我該怎麼做的任何想法?

回答

1

在做,而你需要爲HashMap的創建實例,

public ArrayList<HashMap<String,String>> getList(String search_param){ 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>(); 
     HashMap<String,String> hashmap; 

     String query_select = "SELECT column1, column2 FROM tablename WHERE column2 LIKE '%"+ search_param +"%';"; 

     Cursor cursor = db.rawQuery(query_select,null); 
     if (cursor.moveToFirst()) { 
      do { 
       hashMap = new HashMap<String,String>(); 
       hashMap.put("column1", cursor.getString(0)); 
       hashMap.put("column2",cursor.getString(1)); 
       list.add(hashmap); 
      } while (cursor.moveToNext()); 
     } 
     cursor.close(); 

     return list; 
    } 
+0

非常感謝這個! :D – KaHeL

1

這就像魅力與我

public ArrayList<HashMap<String, String>> getList(String search_param){ 
     ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>(); 
     String query_select = "SELECT column1, column2 FROM tablename WHERE column2 LIKE '%"+ search_param +"%';"; 

     Cursor cursor = db.rawQuery(query_select,null); 


     int colCount = cursor.getColumnCount(); 
     int rowCount = cursor.getCount(); 
     if (cursor.moveToFirst()) { 
      do { 
       HashMap<String, String> col = new HashMap<String, String>(); 
       int size =cursor.getColumnCount(); 
       for (int i = 0; i < size; i++) { 
        col.put(cursor.getColumnName(i), cursor.getString(i)); 
       } 
       list.add(col); 
      } while (cursor.moveToNext()); 
     } 
     if (cursor != null && !cursor.isClosed()) { 
      cursor.close(); 
     } 
     return list; 
    } 
+0

感謝您的答案,但SatushKumar是對的。我忘了在我的HashMap上調用一個新的實例,這就是爲什麼它給了我這樣的結果。無論如何感謝您的答案。我會給你一個贊成這個。 :) – KaHeL

+0

答案是正確的,但他把列名硬編碼說「column1」和「column2」這是不正確的方式。當桌子上有10列時會發生什麼?你會寫這樣的「column1」,「column2」,「column3」,「column4」...「」column10「」嗎?出於這個原因,我用通用方法發佈了我的答案。 –

相關問題