android - 从 SQLite 数据库 android 中检索 BLOB

标签 android image sqlite blob

我有一个数据库,里面有一些图像,保存为 BLOB。 直到现在我对数据库没有任何问题,我尝试像处理任何其他数据一样检索 BLOB,但它不起作用:

Cursor c = mDb.query(" ... ");
c.moveToFirst();

ByteArrayInputStream inputStream = new ByteArrayInputStream(c.getBlob(0));
Bitmap b = BitmapFactory.decodeStream(inputStream);

问题是当程序试图获取“c.getBlob(0)”的信息时出现异常。它也不适用于“byte[] b = c.getBlob(0)”。

可能的原因:

  • 文件太大? (1.2Mb)
  • 我必须执行其他操作来配置它的 BLOB 类型吗?

谢谢!


已解决:当我不小心尝试使用其他文件时,它起作用了!然后我意识到文件较小(小于 1Mb),所以问题似乎是大小。

现在我的问题是,我可以配置它使 BLOB 支持大文件吗?

谢谢!

最佳答案

在尝试检索任何内容之前,您是否验证过光标中确实存在数据?

if(c.getCount() > 0){做某事}

如果您这样做,那么您将尝试检索已经为 null 的内容,这是一个BIG NO NO

此外,当您获取元素时,不是这样检索的好习惯:c.getBlob(0)

其他信息

这样做的原因是,如果您决定更改您的列并更改顺序,这将严重伤害您。

我的建议是在辅助类中存在静态变量来引用您定义的列名,如下所示:

c.getString(c.getColumnIndex(String columnName))

这是更好的做法,因为您只需引用名称即可轻松更改数据库。

在此处阅读我关于如何处理数据库和对数据库进行间接调用的帖子。您将感谢您将避免的所有头痛。

在这里查看:Storing Lists to A Database, and Retrieving Them All Together : Android

此外,在发布问题时,错误的 logcat 有助于更快地解决问题。

关于android - 从 SQLite 数据库 android 中检索 BLOB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6259919/

相关文章:

java - ImageReader maxImages (2) 已在后台任务中获取

android - 使用我的联系人列表中的服务向所有使用 whatsapp 的联系人发送消息

安卓数据绑定(bind) : how to avoid onCheckedChanged triggered by programmatically

image - 插入Picture类的属性

image - 如何生成拇指图像?

android - 我应该在我的 Activity 中保留对 fragment 的引用吗

android - 如何编程按钮将表格布局导出到 Android 应用程序上的图像或 PDF 文件

node.js - 如何将 sqlite3 模块与 Electron 一起使用?

python - 插入中的 sqlalchemy 回滚

java - Android:无法在 Textview 中将来自 SQLite 的字符串设置为 HTML