安装在Sqlite中的Android Bitmap

时间:2013-11-22 21:32:49

标签: android sqlite bitmap rss

我正在开发一个新闻阅读器应用程序,目前当该设备有互联网下载文章时,它会下载文章标题,文本,图像等,并将其全部存储到sqlite数据库中。这样,如果设备没有互联网或用户保存文章以供离线阅读,则仍可以查看文章内容。我的应用程序在下载文章时滞后,并且没有在列表视图中显示图像非常好。它非常波涛汹涌而且不好。存储此数据并快速可靠地访问数据的最佳方法是什么?另外我需要一个不需要图像网址的懒人装载器,有没有可以使用存储在SD卡上的图像?

我的下载方法包括启动后台服务以下载文章文本和图像,并更新sqlite数据库中的每个项目行,所有这些都在后台完成。如果需要,我也可以发布代码。谢谢。

2 个答案:

答案 0 :(得分:3)

对于保存图像,我更喜欢将其直接保存在SD卡上,而不是保存在SQLite中。

我建议使用外部资料库下载图片和兑现,例如Universal Image Loader

但如果您仍想将其保存到SQLite中,请转到:

设置表

CREATE TABLE " + DB_TABLE + "("+ 
               KEY_NAME + " TEXT," + 
               KEY_IMAGE + " BLOB);";

插入数据库

    public void addImage( String name, byte[] image) throws SQLiteException {

        database.beginTransaction();
        try {
            ContentValues cv = new  ContentValues();
            cv.put(KEY_NAME,    name);
            cv.put(KEY_IMAGE,   image);
            database.insert( DB_TABLE, null, cv );
       } finally {
           database.endTransaction();
       }
    }

提取

byte[] image = cursor.getBlob(1);

答案 1 :(得分:0)

我不建议您将图像存储在数据库中。相反,为什么不将图像保存在磁盘缓存中,并将密钥保存到数据库中的映像。尝试使用DiskLruCache。这很简单。顺便说一句,我不建议您将图像保存在数据库中,原因如下:

  1. 图像很大,即使你像varchar一样存储它们,数据量也会减慢你的交易。
  2. 如果您想获得更高的性能,可以实现两级缓存,第一级具有内存缓存,第二级具有磁盘缓存。