2012-07-30 138 views
2

我創建了一個對象數據庫。每個對象都包含兩個strings和兩個bitmaps。當我對我的數據庫執行getAllContacts()調用時,加載需要很長時間。對我來說這不是問題,但對於最終用戶來說,這會很煩人。當我加載對象我設置這個選項,以我的位圖說:加速SQLite數據庫android

BitmapFactory.Options options=new BitmapFactory.Options(); 
    options.inSampleSize = 8; 

這將縮小原來的高度和寬度的Bitmaps到1/8。但仍然需要大約10-15秒才能加載50條記錄並將其填入ListView。有什麼辦法可以檢查我試圖加載的對象是否在內存中,也稱爲paging?或者,也許我可以加載位圖,當用戶按ListView中的項目之一?

在此先感謝!

回答

0

解決辦法:

所以,最後我找到了解決我的問題。而是讓所有的Bitmaps的時候我做了getAllContact()通話,位圖的是當用戶在ListView這是什麼在CustomAdapter的setOnClickListener方法做了我的ListView

String PCN = cases.get(position).getCaseNumber(); 
int tempPCN = Integer.valueOf(PCN); 
tempBitMapArray = dbHandler.getFinger(tempPCN); 

Bitmap left = tempBitMapArray[0]; 
Bitmap right = tempBitMapArray[1]; 

ByteArrayOutputStream bs1 = new ByteArrayOutputStream(); 
left.compress(Bitmap.CompressFormat.PNG, 100, bs1); 

ByteArrayOutputStream bs2 = new ByteArrayOutputStream(); 
right.compress(Bitmap.CompressFormat.PNG, 100, bs2); 

而且getFinger(...)按下列裝方法:

public Bitmap[] getFinger(int pcn) { 

    Bitmap[] fingers = new Bitmap[2]; 

    String SQLQUERY = "SELECT " + RIGHTFINGER + ", " + LEFTFINGER +" FROM " + TABLE_CASES + " WHERE " + KEY_ID + "=" + pcn + ";"; 

    SQLiteDatabase db = this.getWritableDatabase(); 

    Cursor cursor = db.rawQuery(SQLQUERY, null); 
    BitmapFactory.Options options=new BitmapFactory.Options(); 
     options.inSampleSize = 2; 
     if (cursor.moveToFirst()) { 
      do { 

       byte[] blob1 = cursor.getBlob(cursor.getColumnIndexOrThrow("leftFinger")); 
       Bitmap bmp1 = BitmapFactory.decodeByteArray(blob1, 0, blob1.length, options); 

       byte[] blob2 = cursor.getBlob(cursor.getColumnIndexOrThrow("rightFinger")); 
       Bitmap bmp2 = BitmapFactory.decodeByteArray(blob2, 0, blob2.length, options); 

       fingers[0] = bmp1; 
       fingers[1] = bmp2; 
       return fingers; 

       } while(cursor.moveToNext()); 
     } 
     return null; 
} 

我希望這個例子會給其他人一個精確的方向。

2

您設定的樣本大小,但它仍然是讀書(我認爲)的大圖像。爲什麼不設置你的位圖,使它們已經很小,然後你就可以在沒有應用比例因子的情況下讀取小圖像?

我在我自己的代碼做類似的事情有一個ListView,它是非常緩慢的,直到我寫的代碼來縮小每一個新的形象,因爲它是創建,然後總是隻涉及小的圖像。代碼從此過上幸福生活。

+0

這是因爲我需要在服務器端的位圖的完整大小,對於一些算法的東西。 – 2012-07-30 12:54:32

+0

如何創建全尺寸版本和小版本的位圖? – ikh 2012-07-30 13:56:42

+0

@ikh感謝您的意見,我會考慮這一點。但至於現在我將嘗試加載圖像,當用戶在列表視圖中按下的項目。 – 2012-07-31 10:20:09