扫描条形码Mobile vision API时出错?

时间:2016-10-30 06:37:57

标签: java android android-vision

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

1 个答案:

答案 0 :(得分:0)

条形码数组是SparseArray,这意味着返回值中可能存在间隙,也可能为空。

您应该遍历密钥,然后从SparseArray中检索值,如下所示:

for (int i = 0; i < barcodes.size(); i++) {
    Barcode barcode = barcodes.get(barcodes.keyAt(i));
    String value = barcode.displayValue;
}