Intereting Posts
Как добавить элементы в spinner в Android? Понимание архитектуры Android-контактов Анимированный логотип вместе с рушащейся панелью инструментов в CoordinatorLayout Как выделить даты календаря, даты которых поступают из базы данных Что нужно сделать в Activity / Fragment и ViewModel в MVVM Как переносить Android-приложение на платформу iOS? Добавить панель инструментов поиска по карте google, например, в приложении для родных Android. Добавить внешний файл Jar в приложении cordova 3.4.0 Ошибка Android Aidl Compile: не удалось найти импорт для класса Поддерживает ли Android нелинейное прогрессирование в градиентах? Показать все элементы в AutocompleteTextView без ввода текста Как скомпилировать и запустить программу C / C ++ в системе Android Вход в HTML-файл в веб-обозревателе Android (андроид 4.4, kitkat) Установка dp в десятичных знаках в Android В Android-журнале SDK показано: «Загрузка прервана: подключение к https://dl-ssl.google.com отказалось», что можно сделать?

Возможно ли получить последнюю измененную дату из файла активов?

Необычный вопрос: возможно ли получить последнюю измененную дату файла в папке с ресурсами, или это будет бессмысленно и невозможно?

Я спрашиваю, потому что я копирую базу данных только для чтения оттуда в папку данных при запуске приложения, но скорее предпочту только выполнить копию, если существующий файл старше, чем тот, который хранится в папке с ресурсами (или если файл Не существует).

Если это невозможно, кто-нибудь знает о лучшей конвенции? Я могу опубликовать это в отдельном вопросе, если это необходимо. ТИА!

Solutions Collecting From Web of "Возможно ли получить последнюю измененную дату из файла активов?"

Насколько большой / сложной является база данных? Возможно, вам будет проще и гибче использовать экземпляр SQLiteOpenHelper для обработки этого, поскольку с помощью одного вызова getReadableDatabase() он создаст, если необходимо, базу данных и вызовет ваш onUpgrade для обновления базы данных для вас.

Все, что вам нужно сделать, это предоставить onCreate() для создания базы данных, обеспечить onUpgrade() для обновления и onUpgrade() версию базы данных (в onUpgrade() ), когда она изменится, и Android будет обрабатывать создание и обновление базы данных для вас.

В качестве альтернативы (и я не пробовал это), похоже, AssetManager.list() может предоставить вам список путей к вашим активам, затем использовать File (String path) для получения объекта File для базы данных и, наконец, File.lastModified() чтобы получить измененную дату.

Эй, у меня была такая же проблема, как и вы. Я хотел копировать и использовать активы только в том случае, если он был более новым. Поэтому я сделал хранилище sharedPreferences последней установленной версией и использовал это для сравнения дат:

Я добавляю запись в файл strings.xml для хранения версии приложения:

 <string name="version">0.3</string> 

Затем я помещаю предложение if в метод onCreate основного класса:

 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); if( Float.parseFloat(getString(R.string.version)) > prefs.getFloat("LastInstalledVersion", (float) 0.0 ) ) { copyfiles(); } 

И я добавляю новую строку версии в sharedPreferences по методу onPause, так что она будет добавлена ​​наверняка до того, как снова будет вызываться onCreate:

 SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = prefs.edit(); editor.putFloat("LastInstalledVersion", Float.parseFloat(getString(R.string.version)) ); editor.commit(); 

Вероятно, проще, чем использовать имена версий в самом файле.

Обратите внимание, что copyfiles будет запускаться при первом открытии приложения, если у вас есть версия выше 0.0, и будет работать только при увеличении строки версии в более поздних версиях.

Имейте в виду, что этот пример работает только в том случае, если у вас есть один файл для сравнения или нет необходимости в отдельных версиях файлов. В противном случае вы можете использовать несколько разных строк для хранения версий файлов.

Для ресурса, f.lastModified() только для чтения, я попытался использовать f.lastModified() метку файла ( f.lastModified() / f.setSetModified(timestamp) ), и это не сработало, потому что f.setSetModified(timestamp) не работает на Android. По крайней мере, на 2.3.4, который я использовал.

См. https://stackoverflow.com/a/13996418/755804