0

我正在实现一种方法来解码 QR 码并返回 Android 应用程序代码中包含的字符。我想运行此方法,直到成功解码 QR 码并且不返回空值。

它在第一个循环中正确运行。但是,当它在第 1 次循环中读取失败时,它很少从第 2 次循环中解码代码。有时它也会进入无限循环。

如果您有一些提示,请告诉我。

public String readQRCode(Bitmap file) {
    Reader reader = new MultiFormatReader();
    Result result = null;
    do {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, REQUEST_IMAGE);
        Toast.makeText(this, "Please try again", Toast.LENGTH_LONG).show();

        LuminanceSource source = new RGBLuminanceSource(file);
        BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(
                source));
        // Decode
        try {
            result = reader.decode(binaryBitmap);
        } catch (NotFoundException e) {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, REQUEST_IMAGE);
            Toast.makeText(this, "Please try again", Toast.LENGTH_LONG).show();
            e.printStackTrace();
        } catch (ChecksumException e) {
            e.printStackTrace();
        } catch (FormatException e) {
            e.printStackTrace();
        }
    } while (result == null || result.getText() == null);

    return result.getText();
}
4

1 回答 1

1

您已经创建了一个看起来很忙的等待循环。您需要完全重写逻辑。

startActivityForResult 不返回值,因此您永远不应该在调用活动时以相同的方法处理结果。您应该在 onActivityResult 中进行处理。

请参阅此处的文档:http: //developer.android.com/reference/android/app/Activity.html#StartingActivities

在你的情况下:

  • 删除循环,不要对 readQRCode 中的“结果”做任何事情
  • 添加一个 onActivityResult 方法并在那里执行 startActivityForResult 之后的所有操作
  • 如果要循环,请从 startActivityForResult 调用 readQRCode

最终结果不应该有任何类型的循环。

顺便说一句:如果您希望我们更正代码,我们还需要查看您当前的 startActivityForResult 中的内容。

于 2012-07-27T14:26:14.060 回答