2010-12-03 3 views
12

커서를 사용하여 sqlite 데이터베이스에서 imageview에 이미지를 표시하고 싶습니다. 아래 코드를 사용하여 이미지를 검색했지만 이미지 뷰어에 이미지를 표시 할 수 없습니다.android에서 커서를 사용하여 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

'이미지'열에 대한 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

이 커서 객체를 시도 확인()

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

의 내 "테이블을 만들고"문, pls는 두 배로 Cursor.getColumnIndex를 사용하려고; // 커서

모두 더 후 1메가바이트를 지원하지 않습니다 sqlite가, 내가 잘못 될 수 있기 때문에 이미지가 자산 drawble 폴더에 저장하고 이름이어야 데이터베이스에 이미지를 저장하지 않았다하시기 바랍니다의
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

우선 이미지는 데이터베이스에 저장되어야하며 코드로 이름에서 리소스 변환으로 가져와야합니다.

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()); 

이 정보가 도움이되기를 바랍니다.

관련 문제