1
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食品条码

每当我使用它作为位图运行应用程序时,它都会崩溃并给出out of bounds array 0异常。我不确定为什么会这样,但应用程序不断崩溃。

它可以检测方形条码,但无法检测到这个条码。这里有什么问题?

LOGCAT: 来自应用程序的 Logcat

4

1 回答 1

0

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

您应该遍历键,然后从SparseArray这样的检索值:

for (int i = 0; i < barcodes.size(); i++) {
    Barcode barcode = barcodes.get(barcodes.keyAt(i));
    String value = barcode.displayValue;
}
于 2017-01-04T12:49:34.230 回答