2013-11-22 42 views
0

我正在使用新聞閱讀器應用程序,當前設備有互聯網下載文章時,它下載文章標題,文本,圖像等,並將其全部存儲到sqlite數據庫。這樣,如果設備沒有互聯網或用戶保存文章進行離線閱讀,文章內容仍然可以查看。下載文章時我的應用程序滯後,並且不顯示列表視圖中的圖像非常好。這是非常波濤洶涌,並不好。存儲這些數據並快速可靠地訪問它的最佳方式是什麼?另外我需要一個不需要圖片網址的Lazy Loader,有沒有可以使用存儲在SD卡上的圖片的例子?在Sqlite中存儲Android位圖

我的下載方法包括啓動後臺服務以下載文章文本和圖像,並更新sqlite數據庫中的每個項目行,全部在後臺完成。如果需要,我也可以發佈代碼。謝謝。

回答

0

我不建議您將圖像存儲在數據庫中。相反,爲什麼不把你的圖像保存在磁盤緩存中,並將密鑰保存到數據庫中的圖像。嘗試使用DiskLruCache。這很簡單。順便說一句,我不建議你保存圖像在數據庫中的原因如下:

  1. 圖像是巨大的,即使你存儲他們像一個varchar,數據量會減慢你的交易。
  2. 如果您想獲得更高的性能,可以實現兩級緩存,第一級具有內存緩存,第二級具有磁盤緩存。
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

你可能想包裝你的d在事務中的數據庫操作 - 參見[android示例使用事務更新數據庫](http://android.codota.com/scenarios/528e1e21da0ae9404ad3ab53/android.database.sqlite.SQLiteDatabase?tag=bumblebee) – drorw