J'ai une application écrite en utilisant Xamarin pour Android qui me permet de stocker les informations de mes clients. Je stocke toutes les données localement en utilisant sqlite et tout fonctionne bien. Mais j'ai besoin de partager cette information avec mon collègue qui utilise la même application sur son téléphone. Ainsi, par exemple, si j'ajoute une nouvelle commande client à partir de mon téléphone, celle-ci sera enregistrée dans ma base de données locale. Maintenant je veux appuyer sur un bouton pour déclencher la synchronisation de ma base de données locale avec une sauvegarde de cette banque de données dans un dossier partagé dans Dropbox ou Google Drive.,Xamarin: comment sauvegarder/synchroniser une base de données sqlite avec DropBox ou Google Drive
De suggestions ci-dessous, j'essaie d'utiliser DropBox Core Api . Je suis arrivé au point où je m'authentifier pour accéder à mon compte, maintenant je dois copier ma base de données locale dans mon dossier d'application dans Dropbox. J'utilise le code ci-dessous pour ma deuxième activité. Quand il se lance, j'obtiens la page d'authentification pour Dropbox. Après cela, lorsque je clique sur le bouton de sauvegarde, je m'attends à lire la base de données locale et à l'enregistrer dans Dropbox sous ./Apps/ClientsApp/. Mais je reçois seulement une erreur générique (une exception non gérée est survenue). Où est-ce que je fais une erreur?
using Dropbox.CoreApi;
using Dropbox.CoreApi.Android;
using Dropbox.CoreApi.Android.Session;
namespace my_app
{
[Activity(Label = "Second Activity")]
class clientsDB : Activity
{
string AppKey = "myAppKey";
string AppSecret = "myAppSecret";
DropboxApi dropboxApi;
private Button backup;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.clientsDB);
// dropbox
AppKeyPair appKeys = new AppKeyPair(AppKey, AppSecret);
AndroidAuthSession session = new AndroidAuthSession(appKeys);
dropboxApi = new DropboxApi(session);
(dropboxApi.Session as AndroidAuthSession).StartOAuth2Authentication(this);
backup = FindViewById<Button>(Resource.Id.backup);
backup.Click += Backup_Click;
}
private void Backup_Click(object sender, EventArgs e)
{
string origin = System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "dbClients.db3");
string dropboxPath = @"./Apps/ClientsApp";
upload(origin, dropboxPath);
}
// use async cause I had Android.OS.NetworkOnMainThreadException
async void upload(string origin, string destination)
{
using (var input = File.OpenRead(origin))
{
// Gets the local file and upload it to Dropbox
dropboxApi.PutFile(destination, input, input.Length, null, null);
}
}
protected async override void OnResume()
{
base.OnResume();
// After you allowed to link the app with Dropbox,
// you need to finish the Authentication process
var session = dropboxApi.Session as AndroidAuthSession;
if (!session.AuthenticationSuccessful())
return;
try
{
// Call this method to finish the authentication process
session.FinishAuthentication();
}
catch (IllegalStateException ex)
{
Toast.MakeText(this, ex.LocalizedMessage, ToastLength.Short).Show();
}
}
}
}
Vous voulez dire que vous ne trouvez pas de fichier db? Vous devriez avoir un chemin dans votre code, utilisé pour créer SQLiteConnection (si vous l'utilisez). – DawidSibinski
Le chemin ne m'est pas accessible. J'ai mon magasin de DB ici: dbPath = System.IO.Path.Combine (System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal), "myDB.db3"); – opt
Pourquoi vous n'avez pas accès? J'ai juste essayé de créer une variable de fichier lui donnant le chemin au dossier de DB et cela fonctionne. Essayez: Fichier a = nouveau fichier (System.IO.Path.Combine (System.Environment.GetFolderPath (Syst em.Environment.Speci alFolder.Personal), "myDB.db3")); Avec la variable Fichier, vous pouvez copier le fichier db/l'exporter vers un stockage cloud externe. – DawidSibinski