2012-06-07 22 views
0

我有一張名爲food的表。我正在選擇食物的「類別」,我想在列表視圖中顯示它。這是我試過的代碼。在表中選擇多行並插入數組

Cursor c = db.query(DATABASE_TABLE, 
       new String[] { "category" }, null, null, null, null, null); 
     ArrayList<ArrayList<String>> results = new ArrayList<ArrayList<String>>();   
     if(c.moveToFirst()) 
     { 
      do 
      { ArrayList<String> recipe = new ArrayList<String>(); 
       recipe.add(c.getString(1)); 
       recipe.add(c.getString(2)); 
       recipe.add(c.getString(3)); 
       recipe.add(c.getString(4)); 
       results.add(recipe); 
      }while(c.moveToNext()); 
      if(c != null && !c.isClosed()) 
       c.close(); 
     } 
+1

什麼問題? – Barak

+0

我無法將所有行添加到ListView,我只能添加表的第一個值。 – Senps

+0

你必須在4 diff數組中添加4個值。使用佔位符來創建列表,或者如果你想在單個列表中使用它,那麼首先將所有值連接起來並將它添加到數組中。 –

回答

1

立即試用,

Cursor c = db.query(DATABASE_TABLE, 
       new String[] { "category" }, null, null, null, null, null); 
     ArrayList<String> results = new ArrayList<String>();   
     if(c.moveToFirst()) 
     { 
      do 
      { 
      results.add(c.getString(0)); // instead of 0 Index of Category column in your case 
      }while(c.moveToNext()); 
      if(c != null && !c.isClosed()) 
       c.close(); 
     } 

從數據庫查詢,以便您在光標只有一個結果,並與0指數開始你只選擇類別列。所以c.getString(1)c.getString(4)意思不大。如果你從表中選擇所有數據,那麼只有你得到所有列。

+0

是的,它的工作原理,感謝朋友...! – Senps

1

我看到你的問題,你只返回一列(category),但你正試圖訪問幾個不同的。

您應該返回至少五(因爲您試圖訪問多達4和遊標列從0開始)。

如果您嘗試拉取某個類別的項目列表,您需要更改查詢。 Somethign這樣的:

String query = "SELECT * FROM " + DATABASE_TABLE + " WHERE category = " + category; 
return mDb.rawQuery(query, null); 

這將選擇具有任何被包含在可變category類別匹配的所有項目,與該行中返回所有coilumns。

+0

雅我知道了。它應該改正爲recipe.add(c.getString(3));但是我如何訪問下一行? – Senps

+0

我不確定我明白...訪問下一行?查詢返回一個包含列和行的遊標。您正在循環中使用moveToFirst和moveToNext導航行,並使用'c.getString(#)'調用訪問每行中的列。 – Barak