Как соглашаться на файл в raw вне Activity в Android? Дай ошибку NotFoundException

У меня есть файлы в папке res/raw моего приложения .

Когда я нахожусь в Activity, смоги соглашаться на любой из этих файлов без проблем с этим кодом:

    try {
        InputStream in_s = getResources().openRawResource(rawId);
        byte[] b = new byte[in_s.available()];
        in_s.read(b);
        String t = new String(b);
        mTextView.setText(t);
        in_s.close();
    } catch (Exception e) {
        mTextView.setText("Error: " + e.getMessage());
    }

Но если я пробую соглашаться на файл снаружи Activity, я не могу:

   try {
        InputStream in_s = Resources.getSystem().openRawResource(R.raw.invitatorio_1);
        byte[] b = new byte[in_s.available()];
        in_s.read(b);
        t = new String(b);
    } catch (IOException e) {
        e.printStackTrace();
        t="Test";
    }

Он дает мне ошибку типа NotFoundException. Это часть разметки ошибки:

E/AndroidRuntime: ФАТАЛЬНЫЙ EXCEPTION: main Process: org.midominio.app, PID: 26161 android.content.res. Resources $NotFoundException: Resource идентификация #0x7f100001 at android.content.res. Resources.getValue (Resources.java:1313) at android.content.res. MiuiResources.openRawResource (MiuiResources.java:226) at android.content.res. Resources.openRawResource (Resources.java:1205) at org.midominio.app.model. Invitatorio.getTexto (Invitatorio.java:38)

Файл существует, единственное различие состоит в том, что я пробую получить это снаружи от Activity, в нормальном классе.

1
задан 20.03.2019, 17:09
2 ответа

Как хорошо он говорит @Elenasys в Вашем ответе, это была проблема Contexto.

возможная Одна soluciГіn serГ, - чтобы действительно перемещать контекст в класс, была посредством строителя, это было посредством сеттера . В этом случае, если он предпочитал эту opciГіn, serГ - делать это лучше с сеттером , ввиду того, что инстанция класса создается с snapshot Firebase прямо.

Другая opciГіn serГ - в посредством: .getClass().getClassLoader().getResourceAsStream(ruta), например:

String filePath = "res/raw/invitatorio_1.txt";
InputStream in = this.getClass().getClassLoader().getResourceAsStream(filePath);

Мне кажется одной soluciГіn mГЎs просто и mГЎs согласно модели данных, так как мы evitarГ, - когда должен заявлять член типа Context в классе.

P.D: Такие

Как мастер на все руки в комментариях в вопросе. Чувство соглашения на этот файл с элемента модели данных состоит в том, чтобы избавлять от потребления ресурсов в контексте Firebase. Есть в App контент mГЎs или менее длинный, но что повторяется часто. Чтобы предотвращать потребление количества данных в Firebase предпочли помещать этот контент локально в App.

0
ответ дан 02.12.2019, 05:22

В этом случае ты можешь использовать mГ©todo getResources () .openRawResource () , но для этого важно иметь контекст, который podrГ-эксперт посылать в строителе твоего класса:

 InputStream in_s = contexto.getResources().openRawResource(R.raw.invitatorio_1);

из этой формы podrГЎs получать без проблемы InputStream.

3
ответ дан 02.12.2019, 05:22
  • 1
    Он правилен, это была проблема контекста, я попытался помещать контекст в á mbito класса (посредством сеттера ) и функционируй. Хотя я выбрал другую solució n, что, в мое суждение, лучше для этого случая (видеть ответ). Спасибо в любом случае. –  A. Cedano 21.03.2019, 12:35

Теги

Похожие вопросы