雷って幻想的だよね?

宗教:C#、ラノベ好きの戯言です。

Xamarin.AndroidでSQliteの中身を確認する(Dropbox経由)

以前、エミュレーターからデータをとって、中身を確認していたが、Dropboxを経由するほうが、バージョン間の互換を気にしなくても利用できたため、ご紹介する。

※以下は、Clickイベントで処理されることを想定しているが、その処理は、デバグ時のみ利用できる想定である
 理由としては、リリース時は、デバグ状態ではできないためで、ユーザへの影響がありえないと考えられるためである。

Dropboxへの保存処理

		public async Task UploadSqliteDB(string path)
		{
			using (var dbx = new DropboxClient(HiddenData.accessTokenForDropbox))
			{
				string dbFilePath = path;

				Console.WriteLine("アップロード:SQLite");
				try
				{
					
					using (var data = new StreamReader(dbFilePath))
					{
						var updated = await dbx.Files.UploadAsync(
							"/data"+DateTime.Now.ToString("yyyy_MM_dd")+".db3",
							WriteMode.Overwrite.Instance,
							body: data.BaseStream);
						Console.WriteLine("WriteLine:Upload");
						Console.WriteLine("Saved " + dbFilePath);
					}
				}
				catch (Exception e)
				{
					Console.WriteLine("エラー:" + e);
				}
				Console.WriteLine("アップロード-END");
			}

		}

Clickイベント

		/// <summary>
		/// DBへのパスを取得する
		/// </summary>
		/// <returns></returns>
		public string GetPath()
		{
			return dbContext.DatabasePath;
		}

		private async void SaveSqliteDataOnClick(object sender, EventArgs e)
		{
			var dropboxControl = new dropBoxControl();
			var context = Common.ConnectDB.GetDBContext();
			await dropboxControl.UploadSqliteDB(context.GetPath());
		}

※dropBoxControlは「public static SQLiteConnection dbContext;」を保存しているとする。