ActiveAndroid не поддерживает байт []?

Поскольку быстрее сохранять растровые изображения как byte[], а не как String в базе данных, я пытался сделать это для своего проекта. Однако кажется, что byte[] не поддерживается ActiveAndroid. Вот мой код (столбцы не создаются -> да, раньше они были у меня как String, но я переустановил свое приложение, чтобы убедиться, что это не вызовет никаких проблем):

@Table(name = "Image")
public class Image extends Model {
@Column(name = "Image_data")
public byte[] imageData;

@Column(name = "Thumbnail_data")
public byte[] thumbnailData;

public Day day() {
    return (Day)getMany(Day.class,"Day").get(0);
}

public Image(byte[] imageData, byte[] thumbnailData) {
    super();
    this.imageData = imageData;
    this.thumbnailData = thumbnailData;
}

public Image() {
    super();
}

}

Я использую бета-версию ActiveAndroid (загруженную как .jar):

compile files('libs/activeandroid-3.1-beta.jar')

Я подумал, что использование бета-версии может вызвать эту проблему, поэтому я изменил свой build.gradle, как показано на их страница github:

repositories {
mavenCentral()
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}

compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT'

К сожалению, это тоже не работает. Я надеюсь, что в ActiveAndroid можно хранить byte[] как BLOB.


person Rene Ferrari    schedule 19.02.2016    source источник


Ответы (1)


Я только что нашел рабочее решение. Просто преобразуйте byte[] в String, сохраните его в базе данных и, как только вам это понадобится, преобразуйте String обратно в byte[]:

@Table(name = "Image")
public class Image extends Model {

@Column(name = "Image_data")
public String imageData;

@Column(name = "Thumbnail_data")
public String thumbnailData;

public Day day() {
    return (Day)getMany(Day.class,"Day").get(0);
}

public Image(byte[] imageData, byte[] thumbnailData) {
    super();
    this.imageData = Base64.encodeToString(imageData, Base64.NO_WRAP);
    this.thumbnailData = Base64.encodeToString(thumbnailData, Base64.NO_WRAP);
}

public Image() {
    super();
}

public byte[] getImageBytes() {
    return Base64.decode(imageData, Base64.NO_WRAP);
}

public byte[] getThumbnailBytes() {
    return Base64.decode(thumbnailData, Base64.NO_WRAP);
}
}
person Rene Ferrari    schedule 24.02.2016