java - android zxing Intent 集成器

标签 java android

我编写了以下代码,如果您决定扫描 QR 码(使用 zxing)并将其存储在私有(private)存储中,则该代码可以正常工作,但如果您决定取消扫描,它会崩溃并且之前存储的文件内容会消失。

我认为这可能是一个设计错误,不知道为什么。

下面是相关代码

...

/**
 * menu generation
 */
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);
    return true;
}

/**
 * menu handling
 */
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    Context context = getApplicationContext();
    Toast toast = Toast.makeText(context, "", Toast.LENGTH_LONG);
    toast.setGravity(Gravity.FILL_HORIZONTAL, 0, 0);
    switch (item.getItemId()) {
        case R.id.qrScan:
            IntentIntegrator integrator = new IntentIntegrator(this);
            integrator.initiateScan();
            return true;
        case R.id.qrReset:
            File dir = getFilesDir();
            File file = new File(dir, qrCodeFile);
            boolean deleted = file.delete();
            return true;
        case R.id.appClose:
            this.finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
} 

...

    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
    Context context = getApplicationContext();
    Toast toast = Toast.makeText(context, "", Toast.LENGTH_SHORT);
    if (scanResult != null) {
        FileOutputStream fos = null;
        CharSequence text = scanResult.getContents();
        try {
            fos = openFileOutput(qrCodeFile, Context.MODE_PRIVATE);
            try {
                fos.write(text.toString().getBytes());
                fos.close();
                toast.setGravity(Gravity.FILL_HORIZONTAL, 0, 0);
                toast.setText("Code saved");
                toast.show();
            } catch (IOException ex) {
                toast.setGravity(Gravity.FILL_HORIZONTAL, 0, 0);
                toast.setText("Invalid code");
                toast.show();
                Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
                toast.setGravity(Gravity.FILL_HORIZONTAL, 0, 0);
                toast.setText("Error while saving");
                toast.show();
            Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
        }
    }   else {
        toast.setGravity(Gravity.FILL_HORIZONTAL, 0, 0);
        toast.setText("Invalid code");
        toast.show();           
    }  
}

最佳答案

您需要检查resultCode。如果扫描被取消,则不会有有关条形码值的信息。通过 resultCode 您可以检查操作是否成功。

if(resultCode == RESULT_OK) {
    // scan successful
} else {
    // no result
}

关于java - android zxing Intent 集成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13550315/

相关文章:

android - 如何使用新的 Android 4.0 Ice Cream Sandwich API 读取和编辑 Android 日历事件?

java - 如何使 FXML 生成的按钮起作用

Java TicTacToe 游戏无法正确显示

android - 如何做 Canvas 路径动画?

android - 我如何使用来自 Android 的 Sails JS 中的套接字将参数发送到 Controller

Android + App 引擎 : user. getUserID() 在端点中为空

java - 轴 2 WS-互操作性基本配置文件 1.1

java - 有没有人有使用 Swing 的 Java 老虎机示例?

java - Jframe 中图像不刷新

Android Activity 没有向四面八方旋转?