2011-08-02 3 views
2

첫 번째 게시물은 여기에 있습니다. 문제가 발생하면 저와 함께하시기 바랍니다.Android : Sqlite가 큰 얼룩에서 깨졌습니다.

응용 프로그램의 이미지를 sqlite 데이터베이스에 저장하려고합니다. 이미지는 얼룩으로 저장되어야합니다 (이것은 나쁜 생각입니까?). 그렇게 할 수있는 코드는 다음과 같습니다

public long createPicture(String title, byte [] thumb, byte [] imageData) { 
    ContentValues data = new ContentValues(); 
    data.put(T_KEY_TITLE, title);    
    data.put(T_KEY_CONTENT, imageData);  // <-- blob in the db 
    data.put(T_KEY_THUMB, thumb); 

    // db is an SQLiteDatabase 
    return db.insert(TABLE_PICS, null, data); // <-- Crash occurs on this line 
} 

이 코드는 대부분 완벽하게 잘 작동하지만 큰 사진 (카메라에 내장 된 5 메가 픽셀)를 저장하려고 할 때 충돌이 발생합니다. 충돌을 일으킬뿐만 아니라 데이터베이스를 다시 작동시켜 다시 시작하려고 할 때마다 응용 프로그램이 중단됩니다.

제 질문은 :이 문제를 해결할 방법이 있습니까? 아니면 큰 그림을 파일로 저장하고 경로를 저장해야합니까? 또한 sqlite를 사용하는시기와 파일을 언제 사용할지에 대한 일반적인 지침을 얻고 싶습니다.

감사합니다. :)

+0

크래시가 조금 애매합니다. 스택 추적을 얻었습니까? 오류 메시지가 표시됩니다. 그렇지 않다면, 당신은 일종의 무엇인가에 손을 넣고 그것을 게시 할 수 있습니까? –

+0

나는 안드로이드 개발에 익숙하지 만 유용한 오류 메시지는 어디에서 얻을 수 있습니까? 그것이 충돌 할 때 그것은 단지 나에게 "예기치 않게 멈췄다"- 것을 준다. 나는 진짜 전화를 사용하고있다. 가능한 한 스택 트레이스를 얻는 것이 가능한가? – Gordy

+0

@ Gordy : USB를 통해 휴대 전화를 연결하고 Android SDK에서 DDMS (내 환경 설정)와 같은 것을 사용하여 logcat을 모니터링 할 수 있습니다. 또는 Eclipse를 사용하는 경우 동일한 작업을 수행하는 DDMS Perspective가 있습니다. – Squonk

답변

2

을 SD 카드 나 기타 외부 저장 수단에 외부 저장하는 것입니다. getExternalStorageDirectory()은 대용량 파일을 저장할 위치를 제공하거나 API 8 이상인 경우 getExternalFilesDir()을 제공합니다.

데이터베이스 트랜잭션이 잘못 될 수 있습니다 (공간, 트랜잭션 시간 초과 등). 아마도 이미지의 URI를 DB에 저장 한 다음 실제 이미지를 외부 위치에 배치하는 것이 가장 좋습니다.

2

전체 이미지를 데이터베이스에 저장하는 것을 권장하지 않습니다. 대신 이미지 uri 또는 경로를 데이터베이스에 저장하고 실제 이미지 데이터를 콘텐츠 공급자에 저장하는 것이 좋습니다.

그래서 이미지를 저장하기 위해이 될 것이다 :

Uri u; 
File fi = new File("/sdcard/tmp"); 
try { 
    u = Uri.parse(android.provider.MediaStore.Images.Media.insertImage(getContentResolver(), fi.getAbsolutePath(), null, null)); 
    imageSaveName1 = u.toString(); 

} 

당신은 데이터베이스에 imageSaveName1를 저장하는 것, 다음 사용 검색 : 저장 영상, 일반 및 모범 사례를 들어

Bitmap b = android.provider.MediaStore.Images.Media.getBitmap(getContentResolver(), imageSaveName1); 
관련 문제