引用本地文件,如何接收Resources.NotFoundException?

时间:2019-06-17 17:29:02

标签: android json exception

给出以下示例(如下),该示例将在本地加载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是无用的检查,因为编译异常会阻止所有情况。

1 个答案:

答案 0 :(得分:1)

如果您具有raw-s480,raw-hdpi等资源标识符,并试图通过不符合任何指定限定符的设备访问一个文件,则会导致ID为0x0000的ResourceNotFoundException。

如果用户不满足任何其他特定要求,您还可以向用户回退添加默认文件夹(不带raw这样的限定符)