SimpleAdapter在while循环中显示相同的数据

时间:2018-09-12 18:45:18

标签: java android sqlite android-studio

我向SQLite添加了许多数据,但是我的列表视图仅显示最后插入的数据。所有行都具有相同的值。

    public void onResume() {

        super.onResume();

        db = dbHelper.getWritableDatabase();

        String[] queryColumns = new String[]{"_id", DBHelper.COL_VEHICLE_TYPE, DBHelper.COL_OPTION_NAME,DBHelper.COL_DATE };

        cursor = db.query(DBHelper.TABLE_NAME, queryColumns, null,null,
               null,null,null);

        HashMap<String,String> map = new HashMap<String,String>();

        while(cursor.moveToNext())
        {

            map.put("vehicle_type", cursor.getString(1));
            map.put("date", cursor.getString(3));
            lst_driver.add(map);
        }

        String[] showColumns = new String[]{"vehicle_type", "date"};
        int[] views = new int[] {R.id.ColType, R.id.ColDate};

        adapter = new SimpleAdapter(DriverActivity.this,lst_driver, R.layout.activity_list_layout, showColumns, views);
        lv_driver.setAdapter(adapter);
}

当我运行此应用程序时,它会在插入到SQLi中后显示最后一个 DBHelper.COL_VEHICLE_TYPE DBHelper.COL_DATE

0
 9-12-2018 
0
 9-12-2018 
0
 9-12-2018 
0
 9-12-2018 

我在代码中不使用任何更新表功能。它应该显示来自SQLite的所有不相同值的数据。我该如何解决?

2 个答案:

答案 0 :(得分:1)

尝试一下:

HashMap<String,String> map;
while(cursor.moveToNext())
        {
            map = new HashMap<String,String>();
            map.put("vehicle_type", cursor.getString(1));
            map.put("date", cursor.getString(3));
            lst_driver.add(map);
        }

答案 1 :(得分:0)

您的问题来自此代码段。问题是map总是相同的Map实例,而您只是在更改它的内容。

HashMap<String,String> map = new HashMap<String,String>();

while(cursor.moveToNext())
{

    map.put("vehicle_type", cursor.getString(1));
    map.put("date", cursor.getString(3));
    lst_driver.add(map);
}

一个简单的解决方法是每次使用不同的地图:

while(cursor.moveToNext())
{
    HashMap<String,String> map = new HashMap<String,String>();
    map.put("vehicle_type", cursor.getString(1));
    map.put("date", cursor.getString(3));
    lst_driver.add(map);
}

通过在map循环内移动while声明和初始化,可以确保循环中的每次迭代都使用不同的Map实例。