Android用のXamarinを使用して私の顧客情報を保存できるアプリがあります。私はsqliteを使用してすべてのデータをローカルに格納し、すべて正常に動作します。しかし、私は彼の電話で同じアプリを使っている同僚とこの情報を共有する必要があります。たとえば、私の電話から新しい顧客注文を追加すると、これはローカルのdbに保存されます。 DropboxまたはGoogleドライブの共有フォルダにあるこのdbストアのバックアップを使用して、ローカルデータベースの同期をトリガーするボタンを押したいと思います。Xamarin:DropBoxまたはGoogleドライブでsqliteデータベースをバックアップ/同期する方法
以下の提案から、Dropbox Core APIを使用しようとしています。私は自分のアカウントにアクセスするために認証するところまで来たので、DropboxのアプリケーションフォルダにローカルDBをコピーする必要があります。私は第2の活動のために以下のコードを使用しています。起動すると、Dropboxの認証ページが表示されます。その後、私がローカルDBを読んで、Dropboxの./Apps/ClientsApp/に保存することを期待しています。しかし、私は一般的なエラー(処理されない例外が発生した)のみを取得します。私はどこでミスをしていますか?
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();
}
}
}
}
あなたはdbファイルを見つけることができないのですか?コード内にSQLiteConnectionを作成するためのパスが必要です(使用している場合)。 – DawidSibinski
パスにアクセスできません。私はここに私のdbストアを持っています:dbPath = System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal)、 "myDB.db3"); – opt
あなたはアクセスしていないのはなぜですか?私はちょうどそれがDBファイルへのパスを与えるファイル変数を作成しようとしたと動作します。試してください:ファイル=新しいファイル(System.IO.Path.Combine(System.Environment.GetFolderPath(Syst em.Environment.Speci alFolder.Personal)、 "myDB.db3")); File変数を使用すると、dbファイルをコピーすることも、外部のクラウドストレージにエクスポートすることもできます。 – DawidSibinski