gpt4 book ai didi

android - ORMLite 和图像在 Android 上保存为 BLOB

转载 作者:可可西里 更新时间:2023-11-01 18:45:22 25 4
gpt4 key购买 nike

所以我最近在我正在编写的 Android 平板电脑应用程序中将我的数据库内容切换到了 ORMLite。到目前为止一切顺利,大部分内容都已重构/重新编码。尽管我对最初作为 BLOB 存储在数据库中的内容有疑问。在我的原始数据模型中,它看起来像这样:

byte[] imageBytes;

但我不认为我可以在 ORMLite 中使用它,最好我能告诉它必须是一个字符串所以现在我有:

@DatabaseField
String picture;

但是现在,我对如何以字节形式读取和写入这些数据位感到困惑,等等......我使用这样的代码将数据传送到数据库和从数据库传送数据:

...
//Set the clients image to what was captured...
Bitmap resized2= android.graphics.Bitmap.createScaledBitmap(thumbnail, thumbnail.getWidth()/2, thumbnail.getHeight()/2, true);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
resized2.compress(Bitmap.CompressFormat.PNG, 100, baos); //bm is the bitmap object
byte[] b = baos.toByteArray();

mClient.setImageBytes(b);
myImage.setImageBitmap(resized2);
//do save to the database of the image to the blob whose column is picture
ContentValues initialValues = new ContentValues();
initialValues.put("picture", mClient.getImageBytes());
String [] strArray = {""+sid};
long n = dbAdapter.updateRecordsInDB("clients", initialValues, "_id=?", strArray);

现在这就是我保存图像的方式,如果 ORMLite 中没有 BLOBS 而我必须使用字符串,我不确定该怎么做?

为了完整起见,这就是我显示图像的方式:

if(mClient.getImageBytes().length <= 1) //no image in database, thats fine use generic
myImage.setImageResource(R.drawable.sillo); // create a sillouhtette face icon here...
else
myImage.setImageBitmap((BitmapFactory.decodeByteArray(mClient.getImageBytes(),0, (mClient.getImageBytes()).length)));

那么我需要做什么才能将这些图像输入和输出数据库,字符串的字段类型是否适合“Blob”?

最佳答案

您确实可以在 ORMLite 中存储 byte[] 字段。引用manual about byte arrays :

Array of bytes (byte[]) persisted as SQL type VARBINARY. This is different from the DataType.SERIALIZABLE type which serializes an object as an array of bytes.

NOTE: Because of backwards compatibility, any fields that are of type byte[] must be specified as DataType.BYTE_ARRAY or DataType.SERIALIZABLE using the dataType field and will not be auto-detected.

因此,要使用 byte[],您需要指定数据类型:

@DatabaseField(dataType = DataType.BYTE_ARRAY)
byte[] imageBytes;

诀窍在于 ORMLite 不会自动检测 byte[] 的类型,因为存在一些向后兼容性问题。

关于android - ORMLite 和图像在 Android 上保存为 BLOB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6835926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com