2

オブジェクトのデータベースを作成しました。これらの各オブジェクトには、 twostringsと twoが含まれていますbitmaps。データベースをgetAllContacts()呼び出すと、読み込みにかなりの時間がかかります。私にとっては問題ではありませんが、エンドユーザーにとっては煩わしいでしょう。オブジェクトをロードするとき、このオプションをビットマップに設定して、次のように言っています。

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

Bitmapsこれにより、元の高さと幅の 1/8 に縮小されます。それでも、50 レコードをロードしてこれをListView. ロードしようとしているオブジェクトがメモリ内にあるかどうかを確認する方法はありますpagingか? または、ユーザーがListView?

前もって感謝します!

4

2 に答える 2

2

サンプルサイズを設定しましたが、まだ大きな画像を読んでいます(私は推測しています)。ビットマップを既に小さく設定しておけば、倍率を適用せずに小さな画像を読み取ることができます。

私は自分のコードで同様のことを行うlistViewを持っていましたが、新しい画像が作成されるたびに縮小するコードを作成し、常に小さな画像を処理するまでは非常に遅かったです。そして、コードはその後も幸せに暮らしました。

于 2012-07-30T12:52:30.250 に答える
0

ソリューション:

それで、ついに私は私の問題の解決策を見つけました。Bitmaps呼び出しを行ったときにすべてを取得する代わりにgetAllContact()、ユーザーが行を押したときにビットマップが読み込まれListViewますsetOnClickListenerListView

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; 
}

この例が他の人々に正しい方向へのピンポイントを与えることを願っています.

于 2012-08-01T06:41:38.913 に答える