【问题标题】:How to retrieve only unique values from arraylist<hashmap<>> from Sqlite database into listview in android?如何仅从 Sqlite 数据库中的 arraylist<hashmap<>> 检索唯一值到 android 中的 listview 中?
【发布时间】:2014-03-08 02:04:20
【问题描述】:

我正在使用 ArrayList> 将数据插入 SQLite 数据库。我只想使用简单的适配器将唯一值检索到列表视图中。我使用相同的键来插入值。我怎样才能在列表视图中只获取不同的值? 这是我的代码..

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);

【问题讨论】:

    标签: android sqlite arraylist hashmap


    【解决方案1】:

    使用 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 将来自已分组集合中的行之一。你得到的确切的没有定义。

    【讨论】:

      【解决方案2】:

      如果您想获取具有不同动物 ID 的记录,那么您可以这样做

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

      【讨论】:

        猜你喜欢
        • 2016-01-28
        • 1970-01-01
        • 2018-04-18
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多