2010-12-03 16 views
12

カーソルを使ってsqliteデータベースから画像をimageviewに表示します。私は画像を取得するために以下のコードを使用しましたが、私は画像ビューで画像を表示することができません。カーソルを使ってsqliteデータベースから画像を表示します。

Cursor c=this.db.query(TABLE_NAME, new String[] { "name","price","image" }, 
       null, null, null, null, null); 
name.setText(c.getString(0)); 
price.setText(c.getString(1)); 
byte b[]=c.getBlob(2); 
Bitmap bp=BitmapFactory.decodeByteArray(b, 0, b.length); 
ImageView image=(ImageView)findViewById(R.id.ImageView); 
//ByteArrayInputStream imageStream = new ByteArrayInputStream(b);    
//Bitmap theImage = BitmapFactory.decodeStream(imageStream); 
//image.setImageBitmap(theImage);    
image.setImageBitmap(bp); 

画像以外の名前、価格は表示されますが、画像は表示されません。 この問題の解決に役立つ提案やコード。

私を助けてください。

事前に感謝..

+0

'image'カラムのSQLite dbにはどのようなフィールドタイプがありますか? – Brian

答えて

16

私はストリームを使用することを試みた代わりのバイト配列、鉱山の例では、単に私のために動作します。 はまた、ここに私のこの カーソルオブジェクトを試してみてください、あなたに

create table datatable(_id INTEGER PRIMARY KEY AUTOINCREMENT, image BLOB, price INTEGER); 
+0

しかし、なぜ最初のアプローチがうまくいかなかったのですか? –

+0

最初の推測は単純ですが、列数は1から始まり、したがって列idx = 2は価格であり、確かにblobではありません。 – ACM64

+0

decodeByteArray(b、0、b.length)の代わりにdecodeStream()を使用する理由。 –

1

を再確認plsは、文の "テーブルの作成" ですCursor.getColumnIndex()

byte[] blob = c.getBlob(c.getColumnIndex(YourDB.IMAGE)); 
    ByteArrayInputStream inputStream = new ByteArrayInputStream(blob); 
    Bitmap bitmap = BitmapFactory.decodeStream(inputStream); 

を使用するようにしてください。 //カーソルのすべての

mImageView.setImageBitmap(getImageFromBLOB(object.getBlob(object.getColumnIndex("book_thumb")))); 

    public static Bitmap getImageFromBLOB(byte[] mBlob) 
    { 
     byte[] bb = mBlob; 
     return BitmapFactory.decodeByteArray(bb, 0, bb.length); 
    } 
+0

:こんにちは、私にそれを手伝ってほしい場合http://stackoverflow.com/questions/15954896/how-to-save-image-taken-from-camera-and-show-it-to-listview-crashes- with-ille。ありがとう – George

1

まず画像は資産ストアまたはdrawbleフォルダの名前である必要があり、sqliteのはもっとして1メガバイトをサポートしていないので、私は間違っている可能性があり、データベースに画像を保存していないしてくださいイメージはデータベースに保存する必要があります。コードから名前に変換するには、

String videoFileName= c.getString(c.getColumnIndex(TB_SETTING_VIDEOFILENAME)); 
     int dot = videoFileName.lastIndexOf("."); 
     videoFileName=videoFileName.substring(0,dot); 
     Log.d("VIDEOFILENAME", videoFileName); 

     int videoFileRId = getResources().getIdentifier(videoFileName , "raw", getPackageName()); 

これは役に立ちます。

関連する問題