需要声明辅助编译器打开输入流中的奇怪错误
strange error in aide compiler open input stream needs to be declared
我正在使用 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) {
}
}
我没有发现我的代码有任何问题,可能 Aide 需要更多代码或者它不支持这种代码。
我试图从与此类似的其他问题中找出答案,但一无所获。
代码有任何替换吗?
您的代码的问题是您正在调用一个方法,该方法可能 抛出一个 FileNotFoundException
...但您没有捕捉到异常 在围绕调用的异常处理程序中。
我希望它在这里:
this.paintView.setPicture(BitmapFactory.decodeStream(
getContentResolver().openInputStream(data.getData())));
我还会注意到这样的代码:
try {
...
} catch (Exception e) {
// do nothing!
}
被称为"exception squashing"。这是不好的做法。这种东西隐藏了错误。 1) 它通常允许由异常引起的 "damage" 传播到应用程序的其他部分。 2)它使准确诊断错误的真正原因变得更加困难。
而你正在挤压 Exception
,这让事情变得更糟。
总之如果你习惯性的压扁java.lang.Exception
:
- 您的代码可能不可靠
- 你不会知道为什么,
- 您将无法修复它。
您正在尝试访问文件或打开文件,很可能会发生 FileNotFoundException。
因此您需要先捕获该错误,然后再捕获任何其他类型的异常。
所以你的代码应该是这样的:
` switch (request) {
case R.id.album:
try{
if (result == -1) {
this.paintView.setPicture(BitmapFactory.decodeStream(getContentResolver().openInputStream(data.getData())));
}
}
catch (FileNotFoundException e) {}
catch (Exception e){}`
否则你可以将相同的东西扔给其他试图访问它的方法。
带有 throws 子句:
protected void onActivityResult(int request, int result, Intent data) throws FileNotFoundException{
//your code
}
如果您正在使用此方法,那么您必须看到,此异常已被您正在使用的其他方法捕获。
我正在使用 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) {
}
}
我没有发现我的代码有任何问题,可能 Aide 需要更多代码或者它不支持这种代码。 我试图从与此类似的其他问题中找出答案,但一无所获。 代码有任何替换吗?
您的代码的问题是您正在调用一个方法,该方法可能 抛出一个 FileNotFoundException
...但您没有捕捉到异常 在围绕调用的异常处理程序中。
我希望它在这里:
this.paintView.setPicture(BitmapFactory.decodeStream(
getContentResolver().openInputStream(data.getData())));
我还会注意到这样的代码:
try {
...
} catch (Exception e) {
// do nothing!
}
被称为"exception squashing"。这是不好的做法。这种东西隐藏了错误。 1) 它通常允许由异常引起的 "damage" 传播到应用程序的其他部分。 2)它使准确诊断错误的真正原因变得更加困难。
而你正在挤压 Exception
,这让事情变得更糟。
总之如果你习惯性的压扁java.lang.Exception
:
- 您的代码可能不可靠
- 你不会知道为什么,
- 您将无法修复它。
您正在尝试访问文件或打开文件,很可能会发生 FileNotFoundException。
因此您需要先捕获该错误,然后再捕获任何其他类型的异常。
所以你的代码应该是这样的:
` switch (request) {
case R.id.album:
try{
if (result == -1) {
this.paintView.setPicture(BitmapFactory.decodeStream(getContentResolver().openInputStream(data.getData())));
}
}
catch (FileNotFoundException e) {}
catch (Exception e){}`
否则你可以将相同的东西扔给其他试图访问它的方法。
带有 throws 子句:
protected void onActivityResult(int request, int result, Intent data) throws FileNotFoundException{
//your code
}
如果您正在使用此方法,那么您必须看到,此异常已被您正在使用的其他方法捕获。