如何从arraylist <hashmap <>&gt;中仅检索唯一值从Sqlite数据库到android中的listview?</hashmap <>

时间:2014-02-10 16:16:36

标签: android sqlite arraylist hashmap

我使用ArrayList&gt;将数据插入SQLite数据库。我想使用简单的适配器将唯一值检索到listview中。我使用相同的键来插入值。我怎样才能在listview中获得不同的值? 这是我的代码..

Databasehandler.java

public void insertAnimal(HashMap<String, String> queryValues) {
    SQLiteDatabase database = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put("animalName", queryValues.get("animalName"));
    database.insert("animals", null, values);
    database.close();
}

public ArrayList<HashMap<String, String>> getAllAnimals() {
    ArrayList<HashMap<String, String>> wordList;
    wordList = new ArrayList<HashMap<String, String>>();
    String selectQuery = "SELECT  * FROM animals";
    SQLiteDatabase database = this.getWritableDatabase();
    Cursor cursor = database.rawQuery(selectQuery, null);
    if (cursor.moveToFirst()) {
        do {
            HashMap<String, String> map = new HashMap<String, String>();              
            map.put("animalId", cursor.getString(0));
            map.put("animalName", cursor.getString(1));
                wordList.add(map);
        } while (cursor.moveToNext());
     }

    return wordList;
}

这是我的MainActivity.java

DBController controller = new DBController(this);
ArrayList<HashMap<String, String>> animalList =                          controller.getAllAnimals();
if(animalList.size()!=0) {
ListView lv = getListView();
ListAdapter adapter = new SimpleAdapter( MainActivity.this,animalList,  R.layout.view_animal_entry, new String[] { "animalId","animalName"}, new int[]        {R.id.animalId, R.id.animalName}); 
setListAdapter(adapter);

2 个答案:

答案 0 :(得分:2)

使用DISTINCT关键字消除结果集中的重复行:

SELECT DISTINCT * FROM animals

请注意,这只会删除所有列中重复的行。因此,如果您在不同的ID下拥有相同的动物名称,您仍将获得两行。例如,如果您的表包含:

animalId   animalName
1          Lion
1          Lion
2          Lion
3          Tiger
3          Tiger

结果将是:

animalId   animalName
1          Lion
2          Lion
3          Tiger

另一种方法是按动物名称分组:

SELECT * FROM animals
GROUP BY animalName

结果(很可能)是:

animalId   animalName
2          Lion
3          Tiger

请注意,您现在拥有唯一的名称。但是,对于已分组的名称(本示例中为Lion),您获得的animalId将来自分组的集合中的一行。你得到的确切的一个没有定义。

答案 1 :(得分:1)

如果你想获得具有不同animalID的记录,那么你会做这样的事情

public Cursor getUniqueValues() {
    Cursor cursor = database.query(SQLiteHelper.TABLE_NAME,
            allColumns, SQLiteHelper.ANIMAL_ID + " like \'Whatever\'", null, null, null, null ,null);

    return cursor;
}