Xamarin 表单,如何将 byte[] 保存到 SQLite 数据库?
Xamarin forms, how to save byte[] to SQLite database?
今天我正在处理如何将字节数组保存到 SQLite 数据库的问题。当我将 base[] 保存到数据库时,它看起来像 属性 保存该数组,但实际上当我在设备上重新启动应用程序时它没有保存到数据库。也许我必须先将 byte[] 转换为 base 64,然后再将其放入数据库?如果是,我该怎么做?也许还有另一种方法可以保存到 sqlite 数据库,而无需转换为 base64?
这是我的对象class:
public class Unit
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public bool IsStarted { get; set; }
public byte[] CImage { get; set; }
}
这里我从图库中选择图片并设置为可绑定值:
IGalleryImageService galleryService = Xamarin.Forms.DependencyService.Get<IGalleryImageService>();
galleryService.ImageSelected += (o, imageSourceEventArgs) =>
{
ActiveP.CImageBindable = imageSourceEventArgs.ImageSource;
MemoryStream st = new MemoryStream(imageSourceEventArgs.ImageSource);
ImageSource imgSource = ImageSource.FromStream(() => st);
(ActiveP.Page as PTemplate).CImage.Source = imgSource;
};
galleryService.SelectImage();
这是我的另一个单元 class,我正在其中更新我的数据库或将对象插入数据库:
private void UpdateObjectToDB()
{
PUnit pUinit = new PUnit()
{
Id = this.Id,
IsStarted = this.IsStarted,
CImage = this.CImage
};
App.database.Update(pUinit);
}
public int InsertObjectToDB()
{
PUnit pUnit = new PUnit()
{
IsStarted = this.IsStarted,
CCImage = this.CImage
};
return App.database.AddItem(pUnit);
}
我必须在哪里转换以及如何实现?感谢您的回答或建议。
你可以试试这个
private void UpdateObjectToDB()
{
PUnit pUinit = new PUnit()
{
Id = this.Id,
IsStarted = this.IsStarted,
CImage = Encoding.ASCII.GetBytes(this.CImage)
};
App.database.Update(pUinit);
}
public int InsertObjectToDB()
{
PUnit pUnit = new PUnit()
{
IsStarted = this.IsStarted,
CCImage = Encoding.ASCII.GetBytes(this.CImage)
};
return App.database.AddItem(pUnit);
}
好吧,我通过将此 class 属性 更改为字符串类型解决了问题:
public class Unit
{
[PrimaryKey, AutoIncrement]
public string CImageBase64 { get; set; }
}
然后在其他单元中 class 我更改了可绑定数据类型:
public string CImageBindable
{
get
{
return base.CImageBase64;
}
set
{
base.CImageBase64 = value;
OnPropertyChanged(nameof(CImageBindable));
}
}
这里我转换为 base 64
if (this.P.CImageBindable == null)
{
CImage.Source = "img.png";
}
else
{
var imageBytes = Convert.FromBase64String(this.P.CImageBindable);
MemoryStream st = new MemoryStream(imageBytes);
ImageSource imgSource = ImageSource.FromStream(() => st);
CImage.Source = imgSource;
}
图片选择也进行了转换:
IGalleryImageService galleryService = Xamarin.Forms.DependencyService.Get<IGalleryImageService>();
galleryService.ImageSelected += (o, imageSourceEventArgs) =>
{
ActiveParking.CImageBindable = Convert.ToBase64String(imageSourceEventArgs.ImageSource);
MemoryStream st = new MemoryStream(imageSourceEventArgs.ImageSource);
ImageSource imgSource = ImageSource.FromStream(() => st);
(ActiveParking.Page as PTemplate).CImage.Source = imgSource;
};
galleryService.SelectImage();
今天我正在处理如何将字节数组保存到 SQLite 数据库的问题。当我将 base[] 保存到数据库时,它看起来像 属性 保存该数组,但实际上当我在设备上重新启动应用程序时它没有保存到数据库。也许我必须先将 byte[] 转换为 base 64,然后再将其放入数据库?如果是,我该怎么做?也许还有另一种方法可以保存到 sqlite 数据库,而无需转换为 base64?
这是我的对象class:
public class Unit
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public bool IsStarted { get; set; }
public byte[] CImage { get; set; }
}
这里我从图库中选择图片并设置为可绑定值:
IGalleryImageService galleryService = Xamarin.Forms.DependencyService.Get<IGalleryImageService>();
galleryService.ImageSelected += (o, imageSourceEventArgs) =>
{
ActiveP.CImageBindable = imageSourceEventArgs.ImageSource;
MemoryStream st = new MemoryStream(imageSourceEventArgs.ImageSource);
ImageSource imgSource = ImageSource.FromStream(() => st);
(ActiveP.Page as PTemplate).CImage.Source = imgSource;
};
galleryService.SelectImage();
这是我的另一个单元 class,我正在其中更新我的数据库或将对象插入数据库:
private void UpdateObjectToDB()
{
PUnit pUinit = new PUnit()
{
Id = this.Id,
IsStarted = this.IsStarted,
CImage = this.CImage
};
App.database.Update(pUinit);
}
public int InsertObjectToDB()
{
PUnit pUnit = new PUnit()
{
IsStarted = this.IsStarted,
CCImage = this.CImage
};
return App.database.AddItem(pUnit);
}
我必须在哪里转换以及如何实现?感谢您的回答或建议。
你可以试试这个
private void UpdateObjectToDB()
{
PUnit pUinit = new PUnit()
{
Id = this.Id,
IsStarted = this.IsStarted,
CImage = Encoding.ASCII.GetBytes(this.CImage)
};
App.database.Update(pUinit);
}
public int InsertObjectToDB()
{
PUnit pUnit = new PUnit()
{
IsStarted = this.IsStarted,
CCImage = Encoding.ASCII.GetBytes(this.CImage)
};
return App.database.AddItem(pUnit);
}
好吧,我通过将此 class 属性 更改为字符串类型解决了问题:
public class Unit
{
[PrimaryKey, AutoIncrement]
public string CImageBase64 { get; set; }
}
然后在其他单元中 class 我更改了可绑定数据类型:
public string CImageBindable
{
get
{
return base.CImageBase64;
}
set
{
base.CImageBase64 = value;
OnPropertyChanged(nameof(CImageBindable));
}
}
这里我转换为 base 64
if (this.P.CImageBindable == null)
{
CImage.Source = "img.png";
}
else
{
var imageBytes = Convert.FromBase64String(this.P.CImageBindable);
MemoryStream st = new MemoryStream(imageBytes);
ImageSource imgSource = ImageSource.FromStream(() => st);
CImage.Source = imgSource;
}
图片选择也进行了转换:
IGalleryImageService galleryService = Xamarin.Forms.DependencyService.Get<IGalleryImageService>();
galleryService.ImageSelected += (o, imageSourceEventArgs) =>
{
ActiveParking.CImageBindable = Convert.ToBase64String(imageSourceEventArgs.ImageSource);
MemoryStream st = new MemoryStream(imageSourceEventArgs.ImageSource);
ImageSource imgSource = ImageSource.FromStream(() => st);
(ActiveParking.Page as PTemplate).CImage.Source = imgSource;
};
galleryService.SelectImage();