I have used Xamarin Media Plugin for image upload and i want to save that image in Sqlite and retrieve it back from Sqlite. How can i do that ?
Store: Convert the Image bitmap into a Base64String and store it to SQLite.
public static string Base64Encode(string plainText) {
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
return System.Convert.ToBase64String(plainTextBytes);
}
Retrieve: Fetch the Base64String and convert that to Bitmap again.
public static string Base64Decode(string base64EncodedData) {
var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
}
And how to select image from gallery and save to sql database in xamarin -- if like this, where I to implement these Base64Encode?
using Plugin.Media;
using Plugin.Media.Abstractions;
using System;
using Xamarin.Forms;
using SQLite;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace PersonListData
{
public class Person
{
[PrimaryKey, AutoIncrement]
public int IdSis { get; set; }
public string NamePerson { get; set; }
public byte[] PersonImg { get; set; }
}
async void SaveOnClik(object sender, EventArgs e)
{
var person = (Person)BindingContext;
await App.Database.SavePersonAsync(person);
await Navigation.PopAsync();
}
async void PickPhotos(object sender, EventArgs e)
{
if (CrossMedia.Current.IsPickPhotoSupported)
{
var file = await CrossMedia.Current.PickPhotoAsync(new Plugin.Media.Abstractions.PickMediaOptions
{
PhotoSize = PhotoSize.Medium,
});
if (file == null)
return;
image.Source = ImageSource.FromStream(() =>
{
var stream = file.GetStream();
file.Dispose();
return stream;
});
}
else
{
await DisplayAlert("Image error", ":( Hcant do thid.", "Ok");
return;
}
}
readonly SQLiteAsyncConnection _database;
public DataPerson(string dbPath)
{
_database = new SQLiteAsyncConnection(dbPath);
_database.CreateTableAsync<Person>().Wait();
}
public Task<List<Person>> GetPersonListAsync()
{
return _database.Table<Person>().ToListAsync();
}
public Task<Person> GetPersonAsync(int id)
{
return _database.Table<Person>()
.Where(i => i.IdSis == id)
.FirstOrDefaultAsync();
}
public Task<int> SavePersonAsync(Person person)
{
if (person.IdSis != 0)
{
return _database.UpdateAsync(person);
}
else
{
return _database.InsertAsync(person);
}
}
public Task<int> DeletePersonAsync(Person person)
{
return _database.DeleteAsync(person);
}
}
I am confused in this placement