2016-07-25 2 views
1

Сегодня я имею дело с проблемой сохранения массива байтов в базе данных SQLite. Когда я сохраняю базу [] в databse, это похоже на это свойство, содержащее этот массив, но на самом деле оно не сохраняется в базе данных, когда я перезапускаю приложение на устройстве. Может быть, мне нужно преобразовать байт [] в базу 64, прежде чем поместить его в базу данных? Если да, то как я могу это сделать? Также, может быть, есть другой способ сохранить базу данных sqlite, не преобразовывая в base64?Формы Xamarin, как сохранить байт [] в базу данных 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(); 

вот мой другой класс Unit, где я обновить свою базу данных или вставка объектов в базу данных:

 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://stackoverflow.com/questions/41337487/how -в-загрузка-изображения из-URL-и-сохранить-он-к-а-локального-SQLITE-базы данных/41337488 # 41337488 –

ответ

1

Ну, я решил проблему путем изменения этого класса свойства строкового типа:

public class Unit 
    { 
     [PrimaryKey, AutoIncrement] 
     public string CImageBase64 { get; set; } 
    } 

Тогда в другом единичном классе я изменил связываемый тип данных:

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

Вы можете попробовать это

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