我想使用开发的应用程序将图像保存到移动设备中,什么是最好的方法。
我试图通过sqlite保存,但是还有其他选择吗?
答案 0 :(得分:0)
推荐的方法是将图像作为文件而不是存储在数据库中,然后存储路径或足够的路径以在数据库中唯一标识图像。
要存储图像,您必须基于byte [](字节数组)将其存储为BLOB; 但是,使用Android SDK存在一个局限,即使可以保存小于2MB的图像,也只能对其进行检索。
实际上,用SQLite或大多数结构化数据库存储图像(或任何大文件)实际上也没有用,因为对于数据查询而言,您几乎无能为力。
您实际上是通过SQL来保存BLOB的:-
INSERT INTO your_table VALUES(x'00FF01EF');
但是,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?
的一种方法