2016-10-30 4 views
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(); 

    } 
} 

Die barcode.png ist: food barcodeFehler beim Scannen von Barcode Mobile Vision API?

Jedes Mal, wenn ich die App diese als Bitmap führen sie die out of bounds array 0 Ausnahme abstürzt geben. Ich bin mir nicht sicher, warum das passiert, aber die App stürzt weiter ab.

Es kann die quadratischen Barcodes erkennen, aber es kann diese nicht erkennen. Was ist das Problem hier?

Logcat:Logcat from app

+0

Sie bitte logcat posten? – prasad

+0

@ Prasad, ich habe den Logcat – DilllyBar

+0

hinzugefügt Bitte posten Sie es in der Frage, nicht als Link zu einigen Offsite-Dokument-Sharing-Site. Und NICHT als "pdf" -Datei, um laut zu schreien! –

Antwort

0

Die Barcodes Array ist ein SparseArray, das bedeutet, dass es Lücken in den zurückgegebenen Werten werden könnte, könnte es auch leer sein.

Sie sollten über die Tasten durchlaufen und dann die Werte aus dem SparseArray wie folgt abrufen:

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