16

所以我最近在我正在编写的 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”是否正确?

4

1 回答 1

24

您确实可以byte[]在 ORMLite 中存储字段。引用有关字节数组的手册

字节数组 (byte[]) 持久化为 SQL 类型 VARBINARY。这与将对象序列化为字节数组的 DataType.SERIALIZABLE 类型不同。

注意:由于向后兼容,任何类型为 byte[] 的字段都必须使用 dataType 字段指定为 DataType.BYTE_ARRAY 或 DataType.SERIALIZABLE,并且不会被自动检测。

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

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

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

于 2011-07-26T20:40:45.923 回答