嘿所以我正在研究使用google vision api的小项目,重点是阅读条形码并列出它们。 我希望能够多次读取条形码,并且只增加我在barcodeItem对象数组中添加的相同“barcodeItem”对象的数量。
if(currentBarcode != null){
boolean exists = false;
BarcodeItem barcodeItem = new BarcodeItem(currentBarcode);
for (BarcodeItem item : MainActivity.barcodesList){
if(item.barcode == barcodeItem.barcode){
item.itemCount++;
exists = true;
} else {
//do nothing to item
}
}
if(exists == false){
MainActivity.barcodesList.add(barcodeItem);
}
currentBarcode = null;
} else { //do nothing
}
我也尝试过使用contains
。现在代码实际上并没有增加对象的数量,它总是在列表中添加一个新对象,有没有办法可以检查相同条形码的对象列表,然后相应地增加计数?
==
进行比较而是用equals
进行比较。抱歉和谢谢所有人都抽出时间帮助我。
答案 0 :(得分:0)
在Java中,当您在对象上使用“==”运算符时,您正在检查它是否是同一个对象实例。这不是每次都创建新项目。 您有两种选择:
contains
也会在对象中调用equals,所以只要你不在BarcodeItem对象中覆盖它,它就会返回与“==”运算符相同的
答案 1 :(得分:0)
您的属性可能不是原始数据,因此您还应该覆盖属性的equals()
方法。除此之外,
将BarcodeItem的equals()方法重写为:
@Override
public boolean equals(Object obj) {
...
BarcodeItem bi=(BarcodeItem)obj;
if(bi.getYourAttribute.equals(this.yourAttribute))
return true;
}
而不是使用List.contains()
方法。
答案 2 :(得分:0)
你可以通过这种方式,
for (int i = 0; i < MainActivity.barcodesList.size(); i++) {
if (MainActivity.barcodesList.get(i).getBarcodeNo().equalsIgnoreCase(currentBarcode)) {
Toast.makeText(this, "Duplicate QR Code : " + currentBarcode, Toast.LENGTH_SHORT).show();
return;
}
}
BarcodeModel bm = new BarcodeModel();
bm.setBarcodeNo(currentBarcode);
MainActivity.barcodesList.add(bm);
你的计数将是
MainActivity.barcodesList.size() + 1