Где хранить данные, чтобы не удалялись при обновлении?

Вопросы и обсуждения по Android разработке
Ответить
VoV@
Сообщения: 7
Зарегистрирован: Вт фев 07, 2017 2:47 pm

Вт фев 07, 2017 2:54 pm

Здравствуйте.

У меня такой вопрос. Где хранить данные, чтобы они не удалялись при обновлении приложения?

Как вариант в файле в локальном хранилище и оттуда подгружать в Preferences, если что-то понадобится, чтобы быстрее работало. Вот только что будет с файлом? Не удалится ли он при установке новой версии приложения.

Серверную часть пилить как-то не хочется для небольшого и редко меняющегося куска данных.

Подскажите, как быть. Заранее благодарю.

Аватара пользователя
Jasper
Site Admin
Сообщения: 46
Зарегистрирован: Пт дек 23, 2016 8:16 pm
Откуда: Череповец
Контактная информация:

Вт фев 07, 2017 6:26 pm

Если какие-то настройки, то в Preference.
А если данных много, то мобильные базы данных SQLite либо Realm.

Лично мне нравится Realm сколько про него читал, код понятный и удобный.
И судя по тестам работает шустро.

Есть статья-введение https://xamdev.ru/introduction-realm-xamarin/

По SQLite:

Либо самому писать запросы если знаешь SQL
https://developer.xamarin.com/recipes/a ... es/sqlite/

Либо использовать ORM
https://developer.xamarin.com/guides/an ... qlite_orm/

VoV@
Сообщения: 7
Зарегистрирован: Вт фев 07, 2017 2:47 pm

Ср фев 08, 2017 7:14 am

Jasper писал(а):
Вт фев 07, 2017 6:26 pm
Если какие-то настройки, то в Preference.
Так Preference очищаются же при обновлении приложения. Вот в чём вопрос.
Когда я проверяю приложение на телефоне из вижл студии, сохранённые на предыдущем этапе настройки пропадают.

Или я что-то не то делаю?

KIzotov
Сообщения: 3
Зарегистрирован: Ср фев 08, 2017 10:43 am

Ср фев 08, 2017 10:53 am

Я пользуюсь Xamarin плагинами для хранения настроек, все удобно и понятно, настройки не пропадают. Кто муже кросс-платформенный. Для Android данные хранит в Preference.
Вот ссылочка: https://github.com/jamesmontemagno/SettingsPlugin

Для простого хранения больших данных использую Akavache.
Вот ссылочка: https://github.com/akavache/Akavache

olegpuz
Сообщения: 1
Зарегистрирован: Ср фев 08, 2017 7:16 pm

Ср фев 08, 2017 7:31 pm

Я бы рекомендовал сериализацию данных в файлы, если их немного. На iOS есть папки, которые юзер не видит и которые при обновлении системы сохраняются. Для твоих целей на iOS юзают папку Cache. На дроиде должен бы быть аналог, посмотри на System.Environment.SpecialFolder.

VoV@
Сообщения: 7
Зарегистрирован: Вт фев 07, 2017 2:47 pm

Ср фев 08, 2017 8:21 pm

Спасибо всем, кто отписался! Реально много пищи для размышления.

Далее, следующий этап. Решился проникнуться Великой Идеей Realm. Возникли некоторые непонятки с миграцией базы. Вот допустим есть модель:

Код: Выделить всё

public class Lang : RealmObject
{
    [PrimaryKey]
    public int ID { get; set; }
    public string CsharpRulezz{ get; set; }
}
Пользуем её и в хвост и в гриву, а затем приходится менять схему (данные пока пропустим, не в них дело). Новая модель:

Код: Выделить всё

public class Lang : RealmObject
{
    [PrimaryKey]
    public int ID { get; set; }
    public string CsharpRulezz{ get; set; }
    public string JavaSucks{ get; set; }
}
В проге надо теперь указать новую версию схемы:

Код: Выделить всё

var config = new RealmConfiguration() { SchemaVersion = 1 };
var realm = Realm.GetInstance(config);
Так вот вопрос, прогнали мы разок прогу, и что дальше делать-то с этим кодом? Можно убирать и использовать var realm = Realm.GetInstance(), как в первый раз, или тащить его с собой и дальше?

И если, допустим, оставляем в коде, что происходит с предыдущими версиями схемы, когда номер версии станет SchemaVersion = 100500? Как информация о предыдущих 100499 схемах хранится в механизме Realm? Мусор не разводит?

Аватара пользователя
Jasper
Site Admin
Сообщения: 46
Зарегистрирован: Пт дек 23, 2016 8:16 pm
Откуда: Череповец
Контактная информация:

Пт фев 10, 2017 7:00 am

По миграции можно почитать тут:
https://realm.io/docs/xamarin/latest/#p ... -migration

Если данные меняются, вызывается специальный метод для миграции и данные из старого формата преобразуешь в новый, так как тебе нужно.

Версия cхемы необходима, чтобы Realm мог при обновлениях зафиксировать изменение версии и вызвать ту саму функцию для миграции данных.

Данные преобразуются и мусора не остается

Аватара пользователя
Никита
Сообщения: 2
Зарегистрирован: Вт май 16, 2017 9:05 am

Чт авг 03, 2017 2:23 pm

Вопрос схожий по теме: как и где можно хранить безопасно критичные ресурсы, чтобы доступ к ним был только у приложения к которому относятся эти ресурсы? Учитывая что рут прав ни у кого нет
2BV!2B=?

Аватара пользователя
Jasper
Site Admin
Сообщения: 46
Зарегистрирован: Пт дек 23, 2016 8:16 pm
Откуда: Череповец
Контактная информация:

Вс сен 17, 2017 2:30 pm

Никита писал(а):
Чт авг 03, 2017 2:23 pm
Вопрос схожий по теме: как и где можно хранить безопасно критичные ресурсы, чтобы доступ к ним был только у приложения к которому относятся эти ресурсы? Учитывая что рут прав ни у кого нет
У каждого приложения есть своё приватное хранилище для данных, к которым есть доступ только у него

Ответить
  • Информация
  • Кто сейчас на конференции

    Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость