2014-01-23 25 views
0

我是初學android的開發者。我需要你的幫助。我想將我的訂單插入到sqlite,tblorder和orderdtl的2個表中。從多個listview中插入的orderdtl。當我嘗試保存所有。只有最後一行已經插入到orderdtl中,其他表沒有問題。任何人都可以解決這個問題嗎?這是我的代碼只在listview中插入最新的行到sqlite中

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); 
     } 
    }); 

回答

0

我假設'mylist'是一個哈希映射的ArrayList。第一個問題是這條線:

Globals.mylist.set(i, map1); 

用索引'i'替換任何map1保存的元素。因此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.該循環然後停止,因爲'我< Globals.mylist.size()'不再是真實的。爲了避免這個問題,你應該避免從一個集合中移除或添加一個集合,同時迭代它。這裏的解決方案是在迴路完成後簡單地清除收集:

Globals.mylist.clear();