Ссылка на локальный файл, как получить Resources.NotFoundException? - PullRequest
0 голосов
/ 17 июня 2019

Учитывая следующий пример (ниже), который будет загружать файл 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 быть проверен на нулевое значение? Потому что появятся предупреждения lint о том, что inputStream не может быть нулевым. Но если вы передадите идентификатор, который не существует, это возможно. Что, опять же, заставляет меня поверить, что Resources.NotFoundException - бесполезная проверка, потому что исключение компиляции предотвращает сценарий все вместе.

1 Ответ

1 голос
/ 18 июня 2019

ResourceNotFoundException для идентификатора 0x0000 вызывается, если у вас есть идентификаторы ресурсов, такие как raw-s480, raw-hdpi и т. Д., И вы пытаетесь получить доступ к одному файлу через устройство, которое не соответствует ни одному из указанных спецификаторов.

Вытакже может добавить папку по умолчанию (без квалификаторов, таких как raw) для пользователей в качестве запасного варианта, если они не отвечают каким-либо другим специфическим требованиям

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...