gpt4 book ai didi

android - 从 SQLite Blob 创建 Drawable 时出现问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:06 27 4
gpt4 key购买 nike

我将图像文件作为 blob 缓存在 SQLite 数据库中。我在另一个平台上有一个类似的应用程序,它对相同的图像文件做同样的事情。两个平台上的数据库报告相同图像的大小完全相同。所以我认为,但不能保证图像数据会完好无损地进入数据库。

但是当我尝试创建一个 Drawable 时,控制台打印出“DEBUG/skia(267): --- decoder->decode returned false”。

步骤是:

  1. 将 blob 读入字节数组。

    byte[] b = new byte[imageDataCursor.getInt(0)];

    b = imageDataCursor.getBlob(1);

  2. 从字节数组创建一个 InputStream。

    ByteArrayInputStream is = new ByteArrayInputStream(b);

  3. 从 InputStream 创建一个 Drawable。 (这就是上面创建“解码器”消息的原因)

    Drawable drw = Drawable.createFromStream(is, "articleImage");

  4. 将 ImageView.image 设置为 Drawable。

    imgView.setImageDrawable(drw);

到目前为止,没有快乐。有什么建议吗?

最佳答案

我会发布我的解决方案以帮助遇到类似问题的任何人。

我尝试通过将字节数组写入文件然后查看文件来测试我从数据库中读取的字节数组。事实证明,数据库中的 blob 数据并不完整——我得到了几行图像,但不是整个图像。

解决方案涉及创建一个 BufferedInputStream 和一个 ByteArrayBuffer 以从远程服务器读取图像。从远程服务器捕获图像文件并创建字节数组以便能够将其写入 sqlite 数据库的代码如下所示:

             try {
HttpGet getMethod=new HttpGet(url);
HttpClient client=new DefaultHttpClient();
HttpResponse response = client.execute(getMethod);
HttpEntity entity = response.getEntity();
InputStream in = entity.getContent();
BufferedInputStream bis = new BufferedInputStream(in);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
byte[] b = baf.toByteArray();
database.updateArticleWithImageData(b, imageKey);
}
catch (Throwable t) {
android.util.Log.e("MyApp", "Exception fetching image file", t);
}

关于android - 从 SQLite Blob 创建 Drawable 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3532742/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com