Сохраненные данные приложения xamarin в sqlite очищены - PullRequest
1 голос
/ 02 июня 2019

Я использовал sqlite в качестве локальной базы данных в приложении xamarin.forms. После уничтожения приложения база данных очищается.

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

database = new WorkingTimeHistoryItemDatabase(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "TimeStamps.db3"));

Мне нужны эти данные, пока приложение не будет удалено

UPDATE

это класс WorkingTimeHistroryItemDatabase

public class WorkingTimeHistoryItemDatabase
    {
        readonly SQLiteAsyncConnection database;

        public WorkingTimeHistoryItemDatabase(string dbPath)
        {
            database = new SQLiteAsyncConnection(dbPath);
            database.CreateTableAsync<TimeRecord>().Wait();
        }

        public Task<List<TimeRecord>> GetItemsAsync()
        {
            return database.Table<TimeRecord>().ToListAsync();
        }

        //public Task<List<TimeRecord>> GetItemsNotDoneAsync()
        //{
        //    return database.QueryAsync<TimeRecord>("SELECT * FROM [TodoItem] WHERE [Done] = 0");
        //}

        public Task<List<TimeRecord>> GetItemAsync(string id)
        {
            return database.Table<TimeRecord>().Where(i => i.dateOnly == id).ToListAsync();
        }

        public Task<TimeRecord> GetRecentIn()
        {
            return database.Table<TimeRecord>().Where(i => i.inorout == "In").OrderByDescending(i => i.datetime).FirstOrDefaultAsync();
        }


        public Task<TimeRecord> GetRecentOut()
        {
            return database.Table<TimeRecord>().Where(i => i.inorout == "Out").OrderByDescending(i => i.datetime).FirstOrDefaultAsync();
        }


        public Task<int> SaveItemAsync(TimeRecord item)
        {
            return database.InsertAsync(item);
        }

        public Task<int> DeleteItemAsync(TimeRecord item)
        {
            return database.DeleteAsync(item);
        }
    }

Ответы [ 3 ]

2 голосов
/ 22 июня 2019

Лучше всего использовать папку «ApplicationData». он будет хранить данные вашего приложения, и ОС будет знать, что есть что-то, что управляется сторонней организацией.

0 голосов
/ 04 июня 2019

Я изменил путь к папке на «Личный». Похоже, это работает сейчас.

database = new WorkingTimeHistoryItemDatabase(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "TimeStamps.db3"));
0 голосов
/ 03 июня 2019

Если вы тестируете на UWP, убедитесь, что у вас нет «Удалить, а затем переустановите мой пакет».опция проверена.Это в UWP Project> Свойства> Отладка> Параметры запуска.

UninstallCheckBox

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