[ Arbitar2 @ 14.04.2007. 21:43 ] @
Pokusavam da kreiram metodu koja ce da pokupi sve produkte iz Notepada i prebaci ih u current Basket,naravno ako taj produkt vec postoji u basketu dodaj samo kolicinu,a ako ne, dodaje produkt. Problem mi se javlja kada pokusavam da dodam novi produkt u basket, prijavljuje mi izuzetak ConcurrentModificationException .Znam da ne moze da se menja kolekcija(Lista) dok je u iteraciji ,ali ja ne mogu da se setim ni jednog resenja.Vec sam izgubio par sati na tome. Ovo je jedan od pokusaja. Code izgleda ovako:
Code:


public void sendNotepadToBasket(){
                
        List<ProductBasket> prodBasket=new LinkedList<ProductBasket>();
        prodBasket=basket.getProductsBasket();
        
        if(basket==null){
            Basket newBasket=new Basket(currentNotepad);
            saveObject(newBasket);
        }else{
            try{
                for(ProductBasket pbb:basket.getProductsBasket()){        
                    for(ProductBasket pb:currentNotepad.getProductBaskets()){
                        if(pb.getProduct().equals(pbb.getProduct())){
                            pbb.addQuantity(pb.getQuantity());
                        }else{
                            ProductBasket newField =new ProductBasket(pb);
                            prodBasket.add(newField);
                        }
                    }
                }
                // avoiding ConcurrentModificationException exception
                basket.setProductsBasket(prodBasket);
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    
        currentNotepad=null;

    }
    


Svaka pomoc je dobrodosla!

[Ovu poruku je menjao Arbitar2 dana 14.04.2007. u 23:02 GMT+1]
[ anon315 @ 14.04.2007. 22:07 ] @
Samo sam na brzaka pregledao, i sad, nevezano za pitanje, radis neke potpuno nelogicne stvari:

Code:

List<ProductBasket> prodBasket=new LinkedList<ProductBasket>();
prodBasket=basket.getProductsBasket();


Prvo napravis novu listu, a onda preusmeris referencu.

Drugo:

Code:

prodBasket=basket.getProductsBasket();
        
if(basket==null){


Pa ako je basket null, onda ce ti puci null pointer na prvoj liniji...

Na kojoj liniji ti puca tacno, na ovoj:

Code:

prodBasket.add(newField);


?
[ Arbitar2 @ 14.04.2007. 22:15 ] @
To je jedan samo od pokusaja, ali kako vise razmisljam sve su mi gluplji potezi. Da bas tu puca.Sto se tice prvog dela to sam samo na brzaka postavio,prosledjujem sigurno non-null vrednost basketa.
[ anon315 @ 14.04.2007. 22:44 ] @
Pa nista, stvar je jako prosta. Vidi ovo:

Code:

prodBasket=basket.getProductsBasket();


i ovo:

Code:

for(ProductBasket pbb:basket.getProductsBasket()){ 


a zatim:

Code:

prodBasket.add(newField);


Dakle, malo si zakomplikovao kod, ali u svakom slucaju je jasno da je sve to jedan te isti objekat. I ti onda pokusavas dok si u petlji koja prolazi kros tu listu da dodas nesto u nju. E to ne moze i zato ti izlece izuzetak.

Resenje je da u else grani u nekoj skroz sestoj listi pamtis objekte koji su za dodavanje. Kada prodjes spoljasnju for petlju, onda protrci kroz listu objekata za dodavanje i dodaj je u svoju listu (to sada moze, jer lista u koju dodajes nije lista kroz koju se iterira).