Загрузите базу данных Sqlite во внутреннюю память приложения.

Я хочу загрузить базу данных sqlite db, специфичную для оператора сотовой связи, при установке приложения. У меня есть следующий код для загрузки new_db с помощью DownloadManager. Но я получаю следующее исключение.

     java.lang.RuntimeException: Unable to start activity     
ComponentInfo{com.xyz.abc/com.xyz.abc.MainActivity}:     
    java.lang.SecurityException: Destination must be on external storage:     
file:///data/data/com.xyz.abc/databases/new_db.gz

Код:

Uri uri=Uri.parse("http://download_url_of_mine?cellinfo=404_45_1_2");
String databasePath = context.getDatabasePath("existing_db.db").getParent();

lastDownload=
        mgr.enqueue(new DownloadManager.Request(uri)
                .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI |
                        DownloadManager.Request.NETWORK_MOBILE)
                .setAllowedOverRoaming(false)
                .setTitle("Title")
                .setDescription("Downloading Data Once for all.")
                .setDestinationUri(Uri.fromFile(new File(databasePath+"/new_db.gz"))));

Любая помощь высоко ценится! Это DownloadManager следует использовать только для внешних данных, а не для данных, которые мне нужны, чтобы быть в частном доступе приложения?


person nizam.sp    schedule 06.01.2015    source источник


Ответы (1)


Вы пытаетесь загрузить базу данных во внутреннюю память. Кроме того, вы пытаетесь загрузить файл в /data/data/yourAppName/databases/, что не разрешено. Этот путь по умолчанию защищен от записи. Загрузите файл во внутреннюю память или во внешнюю память. Я имею в виду указать другой путь к файлу, по которому можно загрузить и сохранить файл базы данных. Затем прочитайте загруженный файл и извлеките данные.

Надеюсь это поможет.

person Vilas    schedule 06.01.2015