0

我有一个表,我必须从中获取具有 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() 函数。

4

2 回答 2

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);
于 2012-07-23T14:40:20.307 回答
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();
    .......
于 2012-07-23T14:40:59.230 回答