我很高兴在此发帖,因为我在这个错误中浪费了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());
}
}
答案 0 :(得分:0)
如果列表中只有一个项目,则无法删除第二个元素。
ArrayList.remove(1)
删除第二个元素。