У меня есть файлы в папке res/raw
моего приложения android.
Когда я нахожусь в 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, в нормальном классе.
Как хорошо он говорит @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.
В этом случае ты можешь использовать mГ©todo getResources () .openRawResource () , но для этого важно иметь контекст, который podrГ-эксперт посылать в строителе твоего класса:
InputStream in_s = contexto.getResources().openRawResource(R.raw.invitatorio_1);
из этой формы podrГЎs получать без проблемы InputStream
.