1
votes

Les données de l'application Xamarin enregistrées dans sqlite ont été effacées

J'ai utilisé sqlite comme base de données locale dans l'application xamarin.forms. Après avoir tué l'application, la base de données est effacée.

L'ajout de données à la base de données et la lecture à partir de la base de données fonctionnent et le comportement de l'application est correct, mais après avoir été tué pour avoir mis l'application en arrière-plan pendant un moment, les enregistrements de la base de données sont perdus.

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);
        }
    }

J'ai besoin de ces données jusqu'à ce que l'application soit désinstallée

MISE À JOUR

ceci est la classe WorkingTimeHistroryItemDatabase

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


3 commentaires

Quel est le code de WorkingTimeHistoryItemDatabase (...) ? Êtes-vous "juste" en train de créer une connexion sqlite et de lui permettre de créer le fichier si nécessaire ... copiez-vous une base de données préexistante à partir du bundle d'applications, etc ...?


C'est la classe de base de données qui gère tous les appels de base de données. Il contient la table et la base de données


@SushiHangover Je viens d'ajouter cette classe. S'il vous plaît, jetez un oeil.


3 Réponses :


0
votes

Si vous testez sur UWP, vérifiez que vous ne disposez pas de l'option "Désinstaller puis réinstaller mon package". option cochée. C'est dans Projet UWP> Propriétés> Débogage> Options de démarrage.

 UninstallCheckBox


1 commentaires

Je teste sur Android et iOS



0
votes

J'ai changé le chemin du dossier en "Personnel". On dirait que cela fonctionne maintenant.

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


0 commentaires

2
votes

Le mieux est d'utiliser le dossier "ApplicationData". il conservera les données spécifiques de votre application et le système d'exploitation sait qu'il y a quelque chose qui est géré par un tiers.


0 commentaires