public class MainActivity extends AppCompatActivity {
TextView txt;
Bitmap myBitmap;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txt = (TextView)findViewById(R.id.txt);
ImageView myImageView = (ImageView) findViewById(R.id.imgview);
myBitmap = BitmapFactory.decodeResource(
getApplicationContext().getResources(),
R.drawable.barcode);
myImageView.setImageBitmap(myBitmap);
btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bar();
}
});
}
public void bar(){
BarcodeDetector detector =
new BarcodeDetector.Builder(getApplicationContext())
.setBarcodeFormats(Barcode.DATA_MATRIX | Barcode.QR_CODE)
.build();
if(!detector.isOperational()){
txt.setText("Could not set up the detector!");
return;
}
Frame frame = new Frame.Builder().setBitmap(myBitmap).build();
SparseArray<Barcode> barcodes = detector.detect(frame);
Barcode thisCode = barcodes.valueAt(0);
txt.setText(thisCode.rawValue);
Toast.makeText(getApplicationContext(), thisCode.rawValue.toString(), Toast.LENGTH_SHORT).show();
}
}
barcode.png
是:
food barcode
每当我使用此作为Bitmap运行应用程序时,它会崩溃并发出out of bounds array 0
异常。我不确定为什么会这样,但应用程序一直在崩溃。
它可以检测方形条形码,但无法检测到这一条形码。这是什么问题?
LOGCAT: Logcat from app
答案 0 :(得分:0)
条形码数组是SparseArray
,这意味着返回值中可能存在间隙,也可能为空。
您应该遍历密钥,然后从SparseArray
中检索值,如下所示:
for (int i = 0; i < barcodes.size(); i++) {
Barcode barcode = barcodes.get(barcodes.keyAt(i));
String value = barcode.displayValue;
}