由于将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。
答案 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);
}
}