Xamarin格式,如何将byte []保存到SQLite数据库?

问题描述:

今天我正在处理如何将字节数组保存到SQLite数据库的问题。当我将base []保存到数据库时,它看起来像是保存该数组的属性,但实际上它不是保存到数据库,当我在设备上重新启动应用程序时。也许我必须在将数据放入数据库之前将byte []转换为base 64?如果是的话,我该怎么做?也可能有另一种方式保存到sqlite数据库,而不转换为base64?Xamarin格式,如何将byte []保存到SQLite数据库?

这是我的对象类:

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(); 

这里是我的其他单位所在班级我更新我的数据库或插入对象到数据库:

 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); 
} 

在哪里我必须转换和如何实现?感谢您的回答或建议。

+0

这里的一个教程,包括如何保存'字节[]'到SQLite数据库:https://*.com/questions/41337487/how -to-下载图像从-URL并节省,这对A-本地的SQLite数据库/ 41337488#41337488 –

好吧,我改变这个类属性字符串类型解决问题:

​​

然后在其他单元I类变更绑定数据类型:

public string CImageBindable 
     { 
      get 
      { 
       return base.CImageBase64; 
      } 
      set 
      { 
       base.CImageBase64 = value; 
       OnPropertyChanged(nameof(CImageBindable)); 
      } 
     } 

而且在这里我转换为基地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(); 

你可以试试这个

 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); 
}