仅将listview上的最新行插入sqlite

时间:2014-01-23 13:26:48

标签: android sqlite listview

我是初学Android开发者。我需要你的帮助。我想将我的订单插入2个sqlite,tblorder和orderdtl表中。 orderdtl从listview的多个项目中插入。当我试图保存所有。只有最后一行已经插入到orderdtl中,其他表没有问题。任何人都可以解决这个问题吗?这是我的代码

btnsaveto.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View arg0) {
        String orderid=orderid();
        String orderdate=orderdate();
        String notes = edtnotes.getText().toString();
        long outletid = Globals.outletid;
        order = dataSource.createorder(orderid, orderdate, notes, outletid);
        for(int i=0; i< Globals.mylist.size() ;i++){
            Globals.mylist.set(i, map1);
            map1.get(Id);
            map1.get(qty);
        orderdtl = dataSource.createorderdtl(orderid, Id, qty);
            Globals.mylist.remove(i);
        Toast.makeText(EntryTO.this, "masuk Order \n" +
                "ID :" + order.getorderid() +"\n" +
                "DATE:" + order.getorderdate() +"\n" +
                "NOTES :" + order.getnotes() +"\n" +
                "OUTLET ID" + order.getoutletid() +"\n" +
                "ID :" + orderdtl.getorderid() +"\n" +
                "ID PRODUK :" + orderdtl.getId() +"\n" +
                "QTY :" +orderdtl.getqty(),Toast.LENGTH_LONG).show();
        }
        //Intent i3 = new Intent(EntryTO.this, ViewOrder.class);
        //startActivity(i3);
        }
     });

1 个答案:

答案 0 :(得分:0)

我认为'mylist'是Hashmap的ArrayList。第一个问题是这一行:

Globals.mylist.set(i, map1);

用index1保存的索引替换索引'i'的元素。因此map1永远不会在你的循环中改变,你从它得到的值'Id'和'qty'也不会改变。如果您打算从ArrayList获取HashMap,那么它将是:

map1 = Globals.mylist.get(i);

第二个问题是:

Globals.mylist.remove(i);

您正在删除条目,同时也循环遍历它所在的列表。当您执行删除操作时,ArrayList索引会更改。假设您有3个项目:

  • 索引0:第1项
  • 索引1:第2项
  • 索引2:第3项

循环的第一次迭代有i = 0.当你删除索引0时,列表变为:

  • 索引0:第2项
  • 索引1:第3项

在循环的下一次迭代中,i = 1.当你删除索引1时,列表就是:

  • 索引0:第2项

此时,列表的大小为1.然后循环停止,因为'i&lt; Globals.mylist.size()'不再是真的。为避免此问题,您应避免在迭代时删除或添加集合。这里的解决方案是在循环完成后简单地清除集合:

Globals.mylist.clear();