通过Android应用程序将png图像保存在数据库中

时间:2019-04-03 19:35:48

标签: android sqlite imageview android-image android-database

我想使用开发的应用程序将图像保存到移动设备中,什么是最好的方法。

我试图通过sqlite保存,但是还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

推荐的方法是将图像作为文件而不是存储在数据库中,然后存储路径或足够的路径以在数据库中唯一标识图像。

要存储图像,您必须基于byte [](字节数组)将其存储为BLOB; 但是,使用Android SDK存在一个局限,即使可以保存小于2MB的图像,也只能对其进行检索。

  • 从技术上讲,您可以将图像存储为十六进制,二进制,八进制字符串,但这会更复杂,效率更低甚至更具限制性。。因此,实际上您必须将其存储为BLOB 并不完全是事实。

实际上,用SQLite或大多数结构化数据库存储图像(或任何大文件)实际上也没有用,因为对于数据查询而言,您几乎无能为力。

您实际上是通过SQL来保存BLOB的:-

INSERT INTO your_table VALUES(x'00FF01EF');
  • 即......
  • 00(0)是第一个字节,FF(255)是第二个字节,01(01)是第三个字节.........
  • 请注意,以上内容仅适用于具有单列的表

但是,SQLiteDatabase 插入便捷方法代表您进行了从byte []到正确的SQL(十六进制字符串)的转换。

所以您通常会使用:-

ContentValues cv = new ContentValues();
cv.put("your_column",your_image_as_a_byte_array);
your_sqlitedatabase_object.insert("your_table",null,cv);

使用类似

的内容从游标(查询的结果)中检索字节数组。
your_retrieved_image_byte_array = your_cursor.getBlob(your_column_offset_as_an_int); //<<<<<<<<< CursorWindow full error if the row cannot fit into the CursorWindow which has 2MB limit

您可能希望看看How can I insert image in a sqlite database,因为它会更详细,并且具有存储图像和路径的代码(一个图像的存储基于图像大小,小于100k,然后是图像)存储,否则存储路径),并另外将图像检索到ListView中。此外,尽管不建议这样做,但是这是绕过2Mb限制How to use images in Android SQLite that are larger than the limitations of a CursorWindow?

的一种方法