2017-10-13 3 views
-1

데이터베이스에 이미지를 저장할 수 있습니다. 내가 지금 가지고있는 문제는 그것을 검색하여 코드에서 사용하는 것입니다. 내 데이터베이스 핸들러에서SQLite 데이터베이스에서 단일 이미지를 검색하는 방법

봐는 방법을 얻을 :

이 내 이미지 활동 ​​

public class ImageClass { 
int _id; 
byte[] _image; 
String _state_name; 


public ImageClass(){ 

} 

public ImageClass(int state_id,String state_name, byte[] state_image) { 
    this._id = state_id; 
    this._state_name = state_name; 
    this._image = state_image; 

} 

public ImageClass(String state_name, byte[]state_image){ 
    this._state_name = state_name; 
    this._image = state_image; 
} 
public ImageClass(int state_id, byte[]state_image){ 
    this._id = state_id; 
    this._image= state_image; 
} 

public int get_id() { 
    return this._id; 
} 

public void set_id(int state_id) { 
    this._id = state_id; 
} 

public byte[] get_image() { 
    return this._image; 
} 

public void set_image(byte[] state_image) { 
    this._image = state_image; 
} 

public String get_state_name() { 
    return this._state_name; 
} 

public void set_state_name(String set_state_name) { 
    this._state_name = set_state_name; 
} 

그것입니다

btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       ImageClass imageClass = db.getImage(); 
      byte[]in = imageClass._image; 
       Bitmap imah = Utils.getImage(in); 


       img.setImageBitmap(imah); 

      } 
     }); 
    } catch(IOException e) { 
     System.out.println(e); 
    } 
} 

내가 주요 활동에 사용되는 코드에서

ImageClass getImage(int state_id) { 
    SQLiteDatabase db = this.getReadableDatabase(); 

    Cursor cursor = db.query(DATABASE_TABLE_NAME, new String[]{STATE_ID, STATE_NAME, STATE_IMAGE}, STATE_ID + "=?", 
      new String[]{String.valueOf(state_id)}, null, null, null, null); 
    if (cursor != null); 
    cursor.moveToFirst(); 

     ImageClass imageClass = new ImageClass(Integer.parseInt(cursor.getString(0)), 
       cursor.getString(1), cursor.getBlob(1)); 

     cursor.close(); 



    return imageClass; 
} 

봐 .. 그 이후로 정말 절망적이었습니다. 이

+4

오른쪽 방법은 데이터베이스에서 이미지 경로 대신 이미지 파일 –

+2

이 합의를 저장하는 것입니다. SQLite에 큰 blob을 저장하는 것은 권장되지 않습니다. – CommonsWare

+1

위의 코멘트를 첨부하십시오. 앱의 [내부 저장소] (https://developer.android.com/guide/topics/data/data-storage.html#filesInternal) 폴더에 이미지를 저장하고 대신 데이터베이스에 파일 경로에 대한 참조를 저장하십시오. –

답변

0

내가 당신의 문제는 당신이 cursor.getBlob(1)이 즉, BLOB를 검색 할 때 1의 오프셋/인덱스 값을 지정하는 것입니다 믿습니다 ... 단지 couldnt는 올바른 방법을 찾아 온라인으로 많은 것들을 시도를,이 검색됩니다 에서 바이트 배열STATE_IMAGE 열.

커서의 get????() 메서드에 대한 매개 변수는 커서의 열에 대한 오프셋/인덱스입니다. STATE_IMAGE 이와 같이 2하지 1. 것의 오프셋 커서의 세 번째 열은, 다음 작동 것입니다 : -

cursor.getBlob(2)

을하지만,이 발견으로, 아주 쉽게 발생할 수 있습니다 오프셋을 사용하여 오류 있음. 커서 getColumnIndex 메서드를 통해 열 이름을 사용하면 오류가 적고 코드를보다 쉽게 ​​유지 관리 할 수 ​​있습니다. 이걸 사용하면 위의 줄을 따라갈 수 있습니다. -

cursor.getBlob(csr.getColumnIndex(STATE_IMAGE)).

내가 변화 좋을 것 : -

ImageClass imageClass = new ImageClass(Integer.parseInt(cursor.getString(0)), 
      cursor.getString(1), cursor.getBlob(1)); 

에 -

ImageClass imageClass = new ImageClass(Integer.parseInt(cursor.getString(cursor.getColumnIndex(STATE_ID)), 
      cursor.getString(cursor.getColumnIndex(STATE_NAME)), cursor.getBlob(cursor.getColumnIndex(STATE_IMAGE))); 
관련 문제