Ich habe eine App mit Xamarin für Android geschrieben, mit der ich meine Kundeninformationen speichern kann. Ich speichere alle Daten lokal mit sqlite und alles funktioniert gut. Aber ich muss diese Informationen mit meinem Kollegen teilen, der die gleiche App auf seinem Telefon verwendet. Wenn ich zum Beispiel eine neue Kundenbestellung von meinem Telefon hinzufüge, wird dies in meiner lokalen Datenbank gespeichert. Jetzt möchte ich einen Knopf drücken, um die Synchronisation meiner lokalen Datenbank mit einem Backup dieser Datenbank in einem freigegebenen Ordner in Dropbox oder Google Drive auszulösen.,Xamarin: Wie man eine SQLite-Datenbank mit DropBox oder Google Drive sichert/synchronisiert
Von den Vorschlägen unten versuche ich DropBox Core Api . Ich habe den Punkt erreicht, an dem ich mich authentifiziere, um auf mein Konto zuzugreifen. Jetzt muss ich meine lokale Datenbank in meinem App-Ordner in Dropbox kopieren. Ich verwende den folgenden Code für meine zweite Aktivität. Wenn es gestartet wird, erhalte ich die Authentifizierungsseite für Dropbox. Danach, wenn ich auf die Backup-Schaltfläche klicke, erwarte ich, die lokale DB zu lesen und sie in Dropbox unter ./Apps/ClientsApp/ zu speichern. Aber ich bekomme nur einen generischen Fehler (Eine unbehandelte Ausnahme ist aufgetreten). Wo mache ich einen Fehler?
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();
}
}
}
}
Sie meinen, Sie können eine db-Datei nicht finden? Sie sollten einen Pfad dazu in Ihrem Code haben, der zum Erstellen von SQLiteConnection verwendet wird (falls Sie ihn verwenden). – DawidSibinski
Der Pfad ist für mich nicht zugänglich. Ich habe meine Datenbank hier speichern: dbPath = System.IO.Path.Combine (System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal), "myDB.db3"); – opt
Warum haben Sie keinen Zugang? Ich habe gerade versucht, eine Datei-Variable zu erstellen, die den Pfad zur DB-Datei gibt, und es funktioniert. Versuchen Sie: Datei a = neue Datei (System.IO.Path.Combine (System.Environment.GetFolderPath (Syst em.Environment.Speci alFolder.Personal), "myDB.db3")); Mit der Dateivariable können Sie die db-Datei kopieren/in den externen Cloud-Speicher exportieren. – DawidSibinski