Могу ли я использовать столбец таблицы в базе данных Sqlite в качестве переменной ресурса? - PullRequest
0 голосов
/ 22 ноября 2018

у меня есть такой код

Orignally:

String path = "android.resource://" + getPackageName() + "/" + R.raw.video;

        videoView.setVideoURI(Uri.parse(path));

        videoView.requestFocus();
        videoView.start();

И videoView работает отлично.

Затем я изменил код на

String path = "android.resource://" + getPackageName() + "/" + Dbhelper.COLUMN_Path;

        videoView.setVideoURI(Uri.parse(path));

        videoView.requestFocus();
        videoView.start();

Я сохранил "R.raw.video" в COLUMN.Path в базе данных.Оно работает.Но почему videoView не работает?Он сказал мне "Не могу воспроизвести это видео"

1 Ответ

0 голосов
/ 22 ноября 2018

Если вы сохранили целое значение 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, тогда это не поможет, потому что этой полной строке не присвоено значение, как я объяснил ранее.

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