java.util.concurrentmodificationexception at java.util.arraylist$itr.next

Viewed 483

I am getting data from firebase real time database and while iterating over datasnapshot i get java.util.concurrentmodificationexception at java.util.arraylist$itr.next error at line number at line number 493 when insert data into room database like this.

Inventory.getInstance(Inventory.this.getActivity(), 1).InventoryDAO().InsertData(items);

This is the whole method where i am getting this error.

private List<InventoryEntity_TableColums> message; // Class Variable


      private synchronized void append_inventory_conversation(DataSnapshot dataSnapshot) {
        Iterator iterator = dataSnapshot.getChildren().iterator();
    
    
    
        String inventory_Msg, inventory_TO, inventory_FROM, inventory_TimeStamp, inventory_FCM_FROM, inventory_FCM_TO, inventory_Type, Random_ID, inventory_FROM_ID, inventory_Receiver_ID;
    
    
        while (iterator.hasNext()) {
            inventory_Msg = (String) ((DataSnapshot) iterator.next()).getValue();
            inventory_FROM = (String) ((DataSnapshot) iterator.next()).getValue();
            inventory_FROM_ID = (String) ((DataSnapshot) iterator.next()).getValue();
            inventory_TO = (String) ((DataSnapshot) iterator.next()).getValue();
            inventory_TimeStamp = (String) ((DataSnapshot) iterator.next()).getValue();
            inventory_Type = (String) ((DataSnapshot) iterator.next()).getValue();
            Random_ID = (String) ((DataSnapshot) iterator.next()).getValue();
            inventory_FCM_FROM = (String) ((DataSnapshot) iterator.next()).getValue();
            inventory_FCM_TO = (String) ((DataSnapshot) iterator.next()).getValue();
    
    
            // return count of RANDOM ID  in room
            int hasValue = inventoryRoomDatabase.getInstance(getActivity(), 1).inventoryDAO().CheckValueExist(Random_ID);
            Log.d(TAG, "Has inventory " + hasValue);
    
            if (hasValue == 0) {
                inventoryEntity_TableColums inventoryEntity_tableColums;
                if (inventory_Type.equals("1")) {
                    inventoryEntity_tableColums = new inventoryEntity_TableColums(Session.getUserID(),inventory_Msg,  "1");
                    message.add(inventoryEntity_tableColums);
                   
    
                } else if (inventory_Type.equals("2")) {
                    inventoryEntity_tableColums = new inventoryEntity_TableColums(Session.getUserID(),inventory_Msg, "2");
                    message.add(inventoryEntity_tableColums);
                   
    
                } else if (inventory_Type.equals("3")) {
                    inventoryEntity_tableColums = new inventoryEntity_TableColums(Session.getUserID(),inventory_Msg, "3");
                    message.add(inventoryEntity_tableColums);
                    
                } else if (inventory_Type.equals("4")) { //THIS IS FOR SEARCHED IMAGES NOT FOR GIF IMAGES
                    inventoryEntity_tableColums = new inventoryEntity_TableColums( Session.getUserID(),inventory_Msg,"4");
                    message.add(inventoryEntity_tableColums);
    
                   
                } else if (inventory_Type.equals("5")) {
                    //Adding inventory Data Into Database
                    inventoryEntity_tableColums = new inventoryEntity_TableColums( Session.getUserID(),inventory_Msg,"5");
                    message.add(inventoryEntity_tableColums);
    
                   
                } else if (inventory_Type.equals("6")) {
                    //Adding inventory Data Into Database
                    inventoryEntity_tableColums = new inventoryEntity_TableColums( Session.getUserID(),inventory_Msg,"6");
                    message.add(inventoryEntity_tableColums);
    
                  
                } else if (inventory_Type.equals("7")) {
                    //Adding inventory Data Into Database
                    inventoryEntity_tableColums = new inventoryEntity_TableColums(Session.getUserID(),inventory_Msg,"7");
                    message.add(inventoryEntity_tableColums);
                   
                } else if (inventory_Type.equals("8")) {
                    //Adding inventory Data Into Database
                    inventoryEntity_tableColums = new inventoryEntity_TableColums( Session.getUserID(),inventory_Msg,"8");
                    message.add(inventoryEntity_tableColums);
    
                 
    
                } else if (inventory_Type.equals("9")) {
                    //Adding inventory Data Into Database
                    inventoryEntity_tableColums = new inventoryEntity_TableColums(Session.getUserID(),inventory_Msg,"9");
                    message.add(inventoryEntity_tableColums);
    
                    
                } else if (inventory_Type.equals("10")) {
                    //Adding inventory Data Into Database
                    inventoryEntity_tableColums = new inventoryEntity_TableColums( Session.getUserID(),inventory_Msg,"10");
                    message.add(inventoryEntity_tableColums);
                  
                } else if (inventory_Type.equals("11")) {
                    //Adding inventory Data Into Database
                    inventoryEntity_tableColums = new inventoryEntity_TableColums( Session.getUserID(),inventory_Msg,"11");
                    message.add(inventoryEntity_tableColums);
    
                  
                } else if (inventory_Type.equals("12")) {
                    inventoryEntity_tableColums = new inventoryEntity_TableColums( Session.getUserID(),inventory_Msg,"12");
                    message.add(inventoryEntity_tableColums);
                    Log.d(TAG, "Message Type Message" + inventory_Msg);
    
                 
                } else if (inventory_Type.equals("13")) {
                    inventoryEntity_tableColums = new inventoryEntity_TableColums( Session.getUserID(),inventory_Msg,"13");
                    message.add(inventoryEntity_tableColums);
    
                    
    
                }
    
            }
    
        }
        new Thread(new Runnable() {
            @Override
            public void run() {
//THIS LINE WHERE I AM GETTING java.util.concurrentmodificationexception at java.util.arraylist$itr.next at insertInventory
                inventoryRoomDatabase.getInstance(inventoryScreen.this.getActivity(), 1).inventoryDAO().Insertinventory(message);
            }
        }).start();
    }

Room Database's InsertInventroy

@Insert(onConflict = OnConflictStrategy.IGNORE)
    void Insertinventory(List<InventoryEntity_TableColums> inv);
1 Answers

I assume that in the insertinventory method you use an iterator to iterate over list and you want to add new elements to the list. The problem is that you can't use the same iterator for a modified list.

Related