【发布时间】:2021-06-05 13:46:31
【问题描述】:
我是 android 新手,正在尝试使用数据库制作管理会员应用程序。我在这里要做的是,当用户购买任何饮料时,它应该在数据库中将饮料名称更改为“购买”,但是当我将 Arraylist 传递给 db 类时,它显示我的 Arraylist 是空的。
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get(ArrayList.java:437)
at com.shashank.managemembers.DB_Controller.update_available(DB_Controller.java:88)
at com.shashank.managemembers.TempActivity$2.onClick(TempActivity.java:90)
用户输入活动
在这里,用户选择他/她想要的饮料,当他按下完成按钮时,它应该用饮料名称更改数据库。 我正在检查 ArrayList 不为空的 Toast 消息。 Toast 消息总是与用户的选择一起出现,但 db 类抛出错误。
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(TempActivity.this, selectedInListView.get(0), Toast.LENGTH_SHORT).show();
dbController.update_available(code, selectedInListView);
onBackPressed();
}
});
当我将 selectedInListView 传递给 dbController.update_available 时,这里有很多项目。
dbController.java
这里我在 db 中有 9 列从 DRINK1 到 DRINK9。
public void update_available(String memberCode, ArrayList<String> BoughtDrinks) {
Cursor cursor = this.getReadableDatabase().rawQuery("SELECT * FROM MEMBERS WHERE MEMBERCODE = '" + memberCode + "'", null);
int count = cursor.getColumnCount();
while (cursor.moveToNext()) {
for (int i = 5; i < count; i++) {
if (!cursor.getString(i).contains(BoughtDrinks.get(0))) {
this.getReadableDatabase().execSQL("UPDATE MEMBERS SET DRINK"+ i +"='Bought' WHERE DRINK" + i +"='" + BoughtDrinks.get(0) + "'" + "AND MEMBERCODE='" + memberCode + "'");
if(BoughtDrinks.size() > 0 ){
BoughtDrinks.remove(0);
}
}
}
}
cursor.close();
}
我不明白为什么在传递带有元素的 ArrayList 时会引发错误。
【问题讨论】:
-
显然,
BoughtDrinks的size()是0,因此BoughtDrinks.get(0)会抛出上述异常。 --- 关于代码的两点说明: - 变量名应该以小写字母开头 (BoughtDrinks->boughtDrinksv) - 方法名应该写成camelCase,而不是snake_case(update_available-> @ 987654335@) -
也许最初列表不是空的,但在循环中有:
BoughtDrinks.remove(0);所以在下一次迭代中列表可能是空的。 -
@Turing85 感谢您的建议,但您能告诉我更多为什么 buyDrinks.size() 的大小为 0 它不应该大于零吗?因为我正在传递带有元素的arraylist,并且我正在从arraylist中删除元素,但是如果只剩下一个元素,我将条件放在那里,它不会删除最后一个元素。
标签: java android sqlite arraylist android-sqlite