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 Réponses :
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"));
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.
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.