ActiveAndroid不支持byte []?

时间:2016-02-19 16:25:30

标签: android sqlite activeandroid

由于将Bitmaps保存为byte []而不是数据库中的String更快,我试图为我的项目执行此操作。但是,似乎ActiveAndroid不支持byte []。这是我的代码(列未创建 - >是的我以前将它们作为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 page上:

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

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

不幸的是,这也不起作用。我希望可以将byte []存储为ActiveAndroid中的BLOB。

1 个答案:

答案 0 :(得分:2)

我刚刚找到了一个有效的解决方案。只需将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);
}
}