java字节[]数组在输入SQLITE数据库之前和之后都会发生变化
为什么两个字节数组不同?如何保留原始字节数组而不进行更改
我正在使用Android Camera API拍照,并试图将图像的字节[]数据存储在SQLiteDatabase中,然后在另一个活动中检索它。 然而,当我记录字节数组时,我得到的是相机给出的字节数组
V/Byte array before db: [B@42a1e7e0
然后我将字节数组(imageData)以及其他变量插入数据库
String insertSQL = "INSERT INTO " + IMAGE_TABLE_NAME +
" (TIMESTAMP, IMAGEDATA, LAT, LON) VALUES('" + time + "','" + imageData + "','" + lat +"','" + lon +"')";
然后我从游标对象(图像)中检索字节数组
byte[] imData = images.getBlob(images.getColumnIndex("IMAGEDATA"));
Log.v("byte Array after db", imData + " ");
日志的结果是
V/byte Array after db: [B@42919440
在您询问之前,SQLITE数据库中只有一个图像,因为我已清除它并重试
# 1 楼答案
如果我错了,请纠正我,我认为这是一个java基本问题
Java是一种传递值语言
为保留图像数据而创建的
byte[]
对象引用与用于接收的byte[]
对象引用明显不同。打印的是散列,而不是实际的字节数组。如果你看字节数组,它们应该是相同的# 2 楼答案
已修复
问题在于
imageData(字节数组)不能以这种方式插入数据库
是我干的
以及函数createContentValues(imageData)
如果将来有此问题,请不要使用execSQL(string)插入它
# 3 楼答案
您正在打印字节[]数据,而不是真正的位图。您可以通过以下函数获得真正的位图,只需将字节[]值作为参数传递: