我有一个应用程序,每个成员都有个人资料照片。用户可以从图库中选择图像。我要将用户个人资料图像存储到ORMLite数据库中。
profileImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, 999);
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 999 && resultCode == RESULT_OK && data != null && data.getData() != null) {
Uri uri = data.getData();
try {
photo = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
profileImage.setImageBitmap(photo);
user.setMember_picture(imageToByte(photo));
} catch (IOException e) {
e.printStackTrace();
}
}
}
private byte[] imageToByte(Bitmap b){
ByteArrayOutputStream outputstream = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 0, outputstream);
return outputstream.toByteArray();
}
在Uer类:
@DatabaseField(columnName = "PICTURE", dataType = DataType.BYTE_ARRAY)
private byte[] member_picture;
但它不起作用!
您可以将图像存储为数据库中的字符串。要做到这一点,你必须使用Base64
类,例如:
private String imageToString(Bitmap b){
ByteArrayOutputStream outputstream = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 0, outputstream);
return Base64.encodeToString(outputstream.toByteArray(), Base64.DEFAULT);
}
但不要忘记在你的DataType
更新@DatabaseField
。
在数据库中存储图像(或任何类型的文件)通常是次优解决方案,因为从IO角度来看,访问它们可能非常昂贵且速度慢。当您的用户选择特别大的图像时,这个问题可能会更加复杂。
一个很好的常用做法是保存图像文件的副本,然后将该文件的路径存储在数据库中。