无法从SQLite中的Select查询游标中提取表(Android)

时间:2012-07-23 14:35:06

标签: android sqlite

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

2 个答案:

答案 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();
    .......