我向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的所有不相同值的数据。我该如何解决?
答案 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
实例。