我有一张表,我必须从中获取KEY_DATE = dat的行。
然后我将这些行保存为对象并返回这些对象的列表。
问题是,如果我的表中有4个条目,那么我将获得最后一行4次,而不是获得所有4行。
这是我的代码......
while(!l.isEmpty())
{
hd = l.get(0);
l.remove(0);
map = new HashMap<String, String>();
Log.w("myapp",hd._name+hd._price+hd._qty);
map.put("item", hd._name);
map.put("price", Double.toString(hd._price));
map.put("qty", Integer.toString(hd._qty));
map.put("total", Double.toString(hd._price*hd._qty));
mylist.add(n++,map);
}
SimpleAdapter mSchedule = new SimpleAdapter(getActivity(), mylist, R.layout.details_item_list, new String[] {"item", "price", "qty" , "total"}, new int[] {R.id.col1, R.id.col2, R.id.col3, R.id.col4});
list.setAdapter(mSchedule);
正在重试这些项目,但是我的列表视图显示的最后一项只是由我的sql表中的项目数量多次显示。我正确地在循环中使用map.put()和add()函数。
答案 0 :(得分:2)
那是因为您只有一个HistoryDetails
实例,您在List中添加了4次,并在每次迭代时修改它。您需要将hd = new HistoryDetails();
放在循环中,例如
hd = new HistoryDetails();
hd._qty = Integer.parseInt(cursor.getString(3));
hd._name = c.getString(1);
hd._price = Double.parseDouble(c.getString(2));
l.add(hd);
答案 1 :(得分:2)
.....
Cursor cursor = .......
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
hd = new HistoryDetails(); // IMPORTANT !!!!
hd._qty = Integer.parseInt(cursor.getString(3));
hd._name = cursor.getString(1);
hd._price = Double.parseDouble(cursor.getString(2));
l.add(hd);
cursor.moveToNext();
}
cursor.close();
.......