需要声明助手编译器打开输入流中的奇怪错误

2019年7月10日 17点热度 0条评论

我正在使用Aide及其在openInputStream上给我这个奇怪的错误:

The Exception 'java.io.FileNotFoundException' must be caught or declared in the throws clause

我的代码:

case R.id.album:
            intent = new Intent("android.intent.action.GET_CONTENT");
            intent.setType("image/*");
            startActivityForResult(intent, R.id.album);
            break;
        case R.id.camera:
            intent = new Intent("android.media.action.IMAGE_CAPTURE");
            intent.putExtra("output", Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "camera.jpg")));
            startActivityForResult(intent, R.id.camera);
            break;
protected void onActivityResult(int request, int result, Intent data) {
    switch (request) {
        case R.id.album:
            if (result == -1) {
                this.paintView.setPicture(BitmapFactory.decodeStream(getContentResolver().openInputStream(data.getData())));

            }
        case R.id.camera:
            if (result == -1) {
                try {
                    File file = new File(Environment.getExternalStorageDirectory(), "camera.jpg");
                    this.paintView.setPicture(BitmapFactory.decodeFile(file.toString()));
                    file.delete();
                } catch (Exception e) {
                }
            }

我没有在我的代码中发现任何错误,也许爱德需要更多代码,或者它不支持这种代码。

我试图从与此类似的其他问题中找出来,但我什么也没发现。

有什么替代代码吗?

解决方案如下:

代码的问题在于,您正在调用一个可能引发FileNotFoundException的方法...但是您没有在围绕该调用的异常处理程序中捕获该异常。

我希望它在这里:

this.paintView.setPicture(BitmapFactory.decodeStream(
    getContentResolver().openInputStream(data.getData())));

我还要注意这样的代码:

try {
    ...
} catch (Exception e) {
    // do nothing!
}

被称为“异常挤压”。这是不良做法。这种事情隐藏了错误。 1)它通常允许异常引起的“损害”传播到应用程序的其他部分。 2)使得准确诊断错误的真正原因变得更加困难。

您正在挤压
Exception,这使情况变得更糟。

简而言之,如果您习惯性地挤压
java.lang.Exception:

  • 您的代码很可能不可靠
  • 你不知道为什么,而
  • 您将无法修复它。