Firebase从数组中删除数据,给出java.lang.IndexOutOfBoundsException:索引:1,大小:1

时间:2018-02-20 07:04:24

标签: android firebase

我很高兴在此发帖,因为我在这个错误中浪费了2天。实际上我必须使用firebase,我没有太多的命令。我正在将数据添加到数组中,就像这个方法一样

 public void addNewNode(String id, String name,String price){
    HashMap<String, String> names = new HashMap<>();
    names.put("menu_extra_item_id", id);
    names.put("menu_extra_item_name",name);
    names.put("menu_extra_item_price",price);
    names.put("menu_extra_item_quantity",inc_dec_tv.getText().toString());
    ExtraItem.add(names);
    mDatabase.child(userId).setValue(new 
    CalculationModel(userId,restaurant_menu_item_id,
            name_,price_,"1","0",ExtraItem));
}

数据正在完美添加但是当我需要删除特定节点时,它给我带来了巨大的麻烦。我正在尝试使用此代码删除节点

 public void deleteNewNode(final String id){
    dataArray = new ArrayList<>();
    DatabaseReference query = mDatabase;
    query.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for (DataSnapshot child : dataSnapshot.getChildren()) {
                //child is each element in the finished list

                HashMap<String, String> map = (HashMap<String, String>) 
                child.getValue();

                dataArray.add(map.get("extraItem")) ;

                int sizeArray = dataArray.size();
                for (int i =0;i<dataArray.size();i++){

                    HashMap<String, String> map2 = new HashMap<>();
                    map2.put("value", dataArray.get(i));
                   // String mapVal = String.valueOf(map2);

                    try {
                        JSONObject jsonObject = new JSONObject(map2);
                        JSONArray jsonArray = 
                        jsonObject.getJSONArray("value");

                        for (int j = 0;j<jsonArray.length();j++){
                            JSONObject allJsonObject = 
                            jsonArray.getJSONObject(j);

                            String val1 = 
                            allJsonObject.optString("menu_extra_item_id");

                            int sizeBeforRemove =  ExtraItem.size();

                            if(val1.equalsIgnoreCase(id)){

                                int some = i;
                                ExtraItem.remove(i);

                                String extraItemRemaining = 
                               ExtraItem.toString();
                              int sizeAfterRemove =  ExtraItem.size();

                                mDatabase.child(userId).setValue(new 
                            CalculationModel(userId,restaurant_menu_item_id,
                                        name_,price_,"1","0",ExtraItem));


                            }

                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}

ExtraItem是一个初始化的grobal数组但是当我调用deleteNode方法时会出现错误

  

java.lang.IndexOutOfBoundsException:Index:1,size:1 at java.util.ArrayList.remove

这里也是我调用两种方法。

if (checkBox != null) {
    checkBox.toggle();
    if (checkBox.isChecked()) {
        item.setCheckBoxIsChecked(true);    
        addNewNode(item.getExtra_item_id(),item.getChild_item_name(), item.getChild_item_price());                                
    } else {

        item.setCheckBoxIsChecked(false);                       
        deleteNewNode(item.getExtra_item_id());
    }
}

1 个答案:

答案 0 :(得分:0)

如果列表中只有一个项目,则无法删除第二个元素。 ArrayList.remove(1)删除第二个元素。