未找到Android Google Play Service Vision条形码扫描程序库

时间:2015-08-18 17:09:27

标签: java android google-play-services google-vision android-vision

我使用Google Play服务Visible API进行条形码阅读。我尝试了来自official CodeLabs example的代码,该代码在某些(不是所有)设备上不起作用。这是Logcat消息:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCellWithIdentifier(simpleTableIdentifier)
            as? UITableViewCell
        if cell == nil {
            cell = UITableViewCell(style: .Default, reuseIdentifier: simpleTableIdentifier)
        }
        let image = UIImage(named: "star")
        let highlightedImage = UIImage(named: "star2")
        cell!.imageView?.image = image // can compile and run
        cell!.imageView?.highlightedImage = highlightedImage

        cell?.textLabel!.text = dwarves[indexPath.row]
        return cell!
    }

问题是因为设备无法找到库I/Vision﹕ Supported ABIS: [armeabi-v7a, armeabi] D/Vision﹕ Library not found: /data/data/com.google.android.gms/files/com.google.android.gms.vision/barcode/libs/armeabi-v7a/libbarhopper.so I/Vision﹕ Requesting barcode detector download. D/AndroidRuntime﹕ Shutting down VM E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: PID: 24921 java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 at android.util.SparseArray.valueAt(SparseArray.java:273) at MainActivity$1.onClick(MainActivity.java:50) at android.view.View.performClick(View.java:4780) at android.view.View$PerformClick.run(View.java:19866) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) ,之后我得到了异常,因为设备没有检测到条形码(条形码列表为空)。

这是代码:

/data/data/com.google.android.gms/files/com.google.android.gms.vision/barcode/libs/armeabi-v7a/libbarhopper.so

Google Play服务已在所有设备上更新。

任何人都可以帮助我吗?我怎么解决它?

2 个答案:

答案 0 :(得分:0)

我知道它已经晚了但是有人可能会收到错误,但仍然觉得此信息很有用。

由于ArrayIndexOutOfBoundsException,您的应用程序崩溃了。原因如下:

SparseArray<Barcode> barcodes = detector.detect(frame);将所有检测到的data存储在barcodes数组中。如果没有找到数据,它会创建一个空白数组,并且您尝试从空白数组中获取索引0处的值。

在尝试检索数据之前,您应该首先检查数组的大小。将您的代码更改为以下内容:

int totalCodes = barcodes.size();
if (totalCodes > 0) {
    Barcode thisCode = barcodes.valueAt(0);
    TextView txtView = (TextView) findViewById(R.id.txtContent);
    txtView.setText(thisCode.rawValue);
}

或者您应该使用循环来获取barcodes数组中的所有元素。

答案 1 :(得分:0)

detect方法返回一个只包含值的键的SparseArray,你应该遍历这样的结果:

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