【问题标题】:Android Vision API barcode image returnAndroid Vision API 条码图片返回
【发布时间】:2016-11-21 03:46:48
【问题描述】:

我刚刚开始涉足 android 开发中稍微复杂一些的事情。我正在尝试在我的应用程序中设置一个页面,使其具有一个打开“简单相机”的按钮,带有一个复选框,然后返回图像的缩略图并使用它来处理条形码。单击页面上的复选框后,我的应用程序似乎崩溃了,并且我一直在关注 google codelabs 教程,了解如何使该 API 正常工作。也许是因为图像是缩略图?如果你们能帮忙,那就太棒了。

public class AddItemActivity extends AppCompatActivity {

    static final int REQUEST_IMAGE_CAPTURE = 1;
    public TextView txtView;
    BarcodeDetector detector;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().setTitle("Add Item");
        setContentView(R.layout.activity_add_item);
    }

    public void ItemInfo(View view){
        Intent intent = new Intent(this, ItemInfoActivity.class);
        AddItemActivity.this.startActivity(intent);
    }

    public void QRLookup(View view){
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data){
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
            txtView = (TextView) this.findViewById(R.id.ResultQR);
            detector =
                    new BarcodeDetector.Builder(getApplicationContext())
                            .setBarcodeFormats(Barcode.DATA_MATRIX | Barcode.QR_CODE)
                            .build();
            if(!detector.isOperational()){
                txtView.setText("Could not set up the detector!");
                return;}
            Bundle extras = data.getExtras();
            Bitmap imageBitmap = (Bitmap) extras.get("data");
            Frame frame = new Frame.Builder().setBitmap(imageBitmap).build();
            SparseArray<Barcode> barcodes = detector.detect(frame);
            Barcode thisCode = barcodes.valueAt(0);
            txtView.setText(thisCode.rawValue);
        }
    }
}

这是我的活动。这是我的 xml。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="#383838"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingLeft="40dp"
    android:paddingRight="40dp"
    android:paddingTop="20dp"
    android:paddingBottom="100dp"
    tools:context=".AddItemActivity">
//Buttons
    <Button
        android:layout_marginTop="30dp"
        android:layout_width="125dp"
        android:layout_gravity="center"
        android:layout_height="30dp"
        android:text="Add Item"
        android:background="#31be31"
        android:onClick="ItemInfo" />
    <Button
        android:layout_marginTop="30dp"
        android:layout_width="125dp"
        android:layout_gravity="center"
        android:layout_height="60dp"
        android:background="#31be31"
        android:text="QR LOOKUP"
        android:onClick="QRLookup"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/ResultQR" />

</LinearLayout>

最后是我的崩溃日志,或者我在 Android Studio 中调用的 android 监视器。

    07-18 09:33:12.890 16396-16396/com.arcx.cranium I/art: Late-enabling -Xcheck:jni
07-18 09:33:12.939 16396-16396/com.arcx.cranium W/System: ClassLoader referenced unknown path: /data/app/com.arcx.cranium-2/lib/arm64
07-18 09:33:22.187 16396-16396/com.arcx.cranium W/System: ClassLoader referenced unknown path: /data/app/com.arcx.cranium-2/lib/arm64
07-18 09:33:22.389 16396-16396/com.arcx.cranium W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
07-18 09:33:22.589 16396-16856/com.arcx.cranium D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
07-18 09:33:22.684 16396-16856/com.arcx.cranium I/Adreno: QUALCOMM build                   : fcf4852, I1af360237c
                                                          Build Date                       : 09/23/15
                                                          OpenGL ES Shader Compiler Version: XE031.05.13.02
                                                          Local Branch                     : mybranch14465806
                                                          Remote Branch                    : quic/LA.BF64.1.2.9_v2
                                                          Remote Branch                    : NONE
                                                          Reconstruct Branch               : NOTHING
07-18 09:33:22.738 16396-16856/com.arcx.cranium I/OpenGLRenderer: Initialized EGL, version 1.4
07-18 09:34:45.808 16396-16396/com.arcx.cranium D/ChimeraCfgMgr: Reading stored module config
07-18 09:34:45.884 16396-16396/com.arcx.cranium W/System: ClassLoader referenced unknown path: /data/user/0/com.google.android.gms/app_chimera/m/00000004/n/arm64-v8a
07-18 09:34:45.898 16396-16396/com.arcx.cranium D/ChimeraFileApk: Primary ABI of requesting process is arm64-v8a
07-18 09:34:45.902 16396-16396/com.arcx.cranium D/ChimeraFileApk: Classloading successful. Optimized code found.
07-18 09:34:45.963 16396-16396/com.arcx.cranium D/AndroidRuntime: Shutting down VM
07-18 09:34:45.963 16396-16396/com.arcx.cranium E/AndroidRuntime: FATAL EXCEPTION: main
                                                                  Process: com.arcx.cranium, PID: 16396
                                                                  java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { act=inline-data (has extras) }} to activity {com.arcx.cranium/com.arcx.cranium.AddItemActivity}: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
                                                                      at android.app.ActivityThread.deliverResults(ActivityThread.java:3699)
                                                                      at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742)
                                                                      at android.app.ActivityThread.-wrap16(ActivityThread.java)
                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)
                                                                      at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                      at android.os.Looper.loop(Looper.java:148)
                                                                      at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                   Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
                                                                      at android.util.SparseArray.valueAt(SparseArray.java:291)
                                                                      at com.arcx.cranium.AddItemActivity.onActivityResult(AddItemActivity.java:55)
                                                                      at android.app.Activity.dispatchActivityResult(Activity.java:6428)
                                                                      at android.app.ActivityThread.deliverResults(ActivityThread.java:3695)
                                                                      at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) 
                                                                      at android.app.ActivityThread.-wrap16(ActivityThread.java) 
                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) 
                                                                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                      at android.os.Looper.loop(Looper.java:148) 
                                                                      at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                      at java.lang.reflect.Method.invoke(Native Method) 
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
07-18 09:34:46.967 16396-17395/com.arcx.cranium I/Vision: Connection error: null
07-18 09:34:47.969 16396-17395/com.arcx.cranium I/Vision: Connection error: null
07-18 09:34:50.965 16396-16396/com.arcx.cranium I/Process: Sending signal. PID: 16396 SIG: 9
07-18 09:34:51.116 17414-17414/com.arcx.cranium W/System: ClassLoader referenced unknown path: /data/app/com.arcx.cranium-2/lib/arm64
07-18 09:34:51.343 17414-17414/com.arcx.cranium W/System: ClassLoader referenced unknown path: /data/app/com.arcx.cranium-2/lib/arm64
07-18 09:34:51.554 17414-17414/com.arcx.cranium W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
07-18 09:34:51.914 17414-17444/com.arcx.cranium D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
07-18 09:34:51.985 17414-17444/com.arcx.cranium I/Adreno: QUALCOMM build                   : fcf4852, I1af360237c
                                                          Build Date                       : 09/23/15
                                                          OpenGL ES Shader Compiler Version: XE031.05.13.02
                                                          Local Branch                     : mybranch14465806
                                                          Remote Branch                    : quic/LA.BF64.1.2.9_v2
                                                          Remote Branch                    : NONE
                                                          Reconstruct Branch               : NOTHING
07-18 09:34:51.995 17414-17444/com.arcx.cranium I/OpenGLRenderer: Initialized EGL, version 1.4

非常感谢你们,我不完全确定如何解释一些崩溃日志,我也不能 100% 确定条形码 api 的工作原理。我试图以最简单的方式制作这个应用程序,然后从那里向上移动。 :)

【问题讨论】:

    标签: android api debugging camera vision


    【解决方案1】:

    作为你的 java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 异常表示,您正在尝试访问空数组的第一项。

    在这里:

        SparseArray<Barcode> barcodes = detector.detect(frame);
        Barcode thisCode = barcodes.valueAt(0);
    

    获取条形码后,请确保您的 SparseArray 不为空,然后再访问它的元素。

        SparseArray<Barcode> barcodes = detector.detect(frame);
        if (barcodes.size() > 0) {
                Barcode thisCode = barcodes.valueAt(0);
                txtView.setText(thisCode.rawValue);
        }
    

    【讨论】:

      猜你喜欢
      • 2018-07-30
      • 2016-06-10
      • 2018-01-26
      • 1970-01-01
      • 1970-01-01
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      相关资源
      最近更新 更多