Если вы сохранили целое значение R.raw.video
, то это целое число, которое система присвоила видеофайлу this resource при компиляции проекта.Я полагаю, что вы получили его во время выполнения и сохранили его в БД.Это целочисленное значение действует до тех пор, пока вы используете apk, созданный во время этой компиляции. Но , если вы вносите какие-либо изменения (особенно в свои ресурсы) и перекомпилируете, нет никакой гарантии, что это значение останется действительным и будет соответствовать этому ресурсу, поскольку значениям ресурса могут быть назначены новые значения.Так что твой путь неправильный.Одним из способов решения этой проблемы является сохранение в БД строки «name» ресурса, что означает: "video"
(не полностью R.raw.video
).Теперь, когда вы хотите получить файл из папки raw
,после того, как вы получите значение из базы данных в переменную типа videoName
, сделайте это:
int id = getResources().getIdentifier(videoName, "raw", getPackageName());
Это способ получить целочисленный идентификатор ресурса с именем videoName
, который находится в raw
папка.Если ваш код находится вне действия, вам необходимо указать действительный Context
, например:
int id = context.getResources().getIdentifier(videoName, "raw", context.getPackageName());
и, наконец,
String path = "android.resource://" + getPackageName() + "/" + id;
Редактировать Есливы сохранили R.raw.video
как строку в db, тогда это не поможет, потому что этой полной строке не присвоено значение, как я объяснил ранее.