给出以下示例(如下),该示例将在本地加载json文件。有机会出现Resources.NotFoundException吗?如果引用的文件不存在,则会收到编译错误。此外,可以说您以某种方式传递了编译错误,管理此异常值得吗?假设您想知道何时存在这样的问题(无需屏蔽/处理)?
public static String loadJsonFromAsset(@NonNull Context context, int id) {
String json;
// open a data stream for reading a raw resource
InputStream is = context.getResources().openRawResource(id);
try {
// estimate of the number of bytes that can be read (or skipped over) from this
// input stream
byte[] buffer = new byte[is.available()];
is.read(buffer);
// constructs a new String by decoding the specified array of bytes using the specified
// charset set String representation of json
json = new String(buffer, UTF);
} catch (IOException e) {
Logger.e(TAG, e.getMessage());
e.printStackTrace();
return null;
} finally {
try {
is.close();
} catch (IOException e) {
Logger.e(TAG, e.getMessage());
e.printStackTrace();
}
}
return json;
}
如果需要处理,是否应该检查inputStream为null?因为将出现棉绒警告,提示输入流为null是不可能的。但是,如果您传递的ID不存在,则有可能。再一次,这使我相信Resources.NotFoundException是无用的检查,因为编译异常会阻止所有情况。
答案 0 :(得分:1)
如果您具有raw-s480,raw-hdpi等资源标识符,并试图通过不符合任何指定限定符的设备访问一个文件,则会导致ID为0x0000的ResourceNotFoundException。
如果用户不满足任何其他特定要求,您还可以向用户回退添加默认文件夹(不带raw
这样的限定符)