2012-11-15 8 views
0

안녕하세요 뷰어 페이지에 이미지를 추가하려고 할 때 모두 안녕하세요. db4o 데이터베이스에서 비트 맵을 가져오고 있습니다. 인코딩인지 또는 사용하고있는 것이 아닌지 잘 모르겠습니다. 쪽으로).ViewFlipper가 비트 맵 이미지를로드하지 않습니다.

private void setImageView() { 
    page = (ViewFlipper) findViewById(R.id.viewFlipper1); 

    int temp = DigPlayDB.getInstance(getBaseContext()).getPlaysDBSize(); 

    for(int j = 0; j < temp; ++j){ 
     test.add(DigPlayDB.getInstance(getBaseContext()).getPlayByInt(j).getImage()); 
     test1.add(DigPlayDB.getInstance(getBaseContext()).getPlayByInt(j).getPlayName()); 
    } 

    for(int i=0;i<temp; i++) 
    { 
     // This will create dynamic image view and add them to ViewFlipper 
     setFlipperImage(test.get(i)); 
    } 

그리고 다음 이미지의 설정과 페이지 뷰를 추가

private void setFlipperImage(Bitmap image){ 
    ImageView _image = new ImageView(getApplicationContext()); 
    //_image.setBackgroundDrawable(new BitmapDrawable(getResources(), image)); 
    _image.setImageBitmap(image); 
    page.addView(_image); 
    Log.d("db", "" + image); 

} 

내가 데이터베이스하지만 그냥 이미지에 이전 이미지뿐만 아니라 이미지를 추가 후 바로 작동 내가 응용 프로그램을 다시 시작하면 내가 설정 한 디버깅 로그에서 수행한다고해도로드가되지 않습니다. 나는 그것이 어딘가에 캐시에있을 수 있기 때문에 마지막 하나가 나타난다 고 생각하고 있지만 데이터베이스에 저장되어 있고 캐시에 저장되어 있지 않은 오래된 것들은 올바르게 또는 무엇인가 인코딩되지 않았다. 어떤 도움이라도 굉장합니다. 감사!

편집 : "테스트"는 비트 맵의 ​​arraylist입니다.

+0

어떻게 이미지를 db4o에 저장합니까? 바이트 배열로? 아니면 안드로이드 클래스 인스턴스의 객체를 저장하려고합니까? – Gamlor

+0

저는 이미지를 앱에서 사용하는 클래스 구조 중 하나에 Bitmap 객체로 저장합니다. – user1799107

답변

1

좋아, 당신이 코멘트에서 비트 맵 인스턴스로 개체를 저장했다. 내 생각 엔 안드로이드 또는 라이브러리 클래스.

하지 마십시오. 자신의 클래스의 인스턴스 만 저장하십시오. 클래스, java.util.collections, 배열 및 프리미티브의 인스턴스를 저장하는 것은 괜찮습니다. db4o는 모든 객체를 저장하려고 열심히 노력할 것입니다. 이것은 라이브러리 인스턴스의 문제입니다. 당신은 그들이하는 일, 내부적으로 어떻게 일하는가, 그리고 그들이 로딩 한 후에도 여전히 일하는 것을 통제하지 못합니다.

여기 무슨 일이 일어난 것 같아요. 애플리케이션이 실행되는 동안 db4o는 객체의 캐시 된 인스턴스를 반환합니다. 응용 프로그램을 다시 시작하면 db4o가 Bitmap 객체를로드합니다. 그러나 비트 맵 객체는 db4o에 저장되지 않으므로 잘못된 내부 상태가 저장됩니다.

따라서 바이트 배열로 사진을 저장하십시오. 아니면 SD 카드에 일반 파일로.

+0

답변 해 주셔서 감사합니다. 바이트 배열을 사용하도록 이미지의 getter 및 설정을 처리하는 코드를 추가했습니다. '공개 된 GetImage 비트 맵() { \t 창 BitmapFactory.decodeByteArray (this._image, 0, _image.length); \t}' \t '공공 무효 setImage (비트 맵 화상) { \t \t있는 ByteArrayOutputStream 스트림 = 새를 ByteArrayOutputStream(); \t \t image.compress (Bitmap.CompressFormat.JPEG, 100, stream); \t \t this._image = stream.toByteArray(); \t}' 변경 사항을 추가하는 중 변경 사항을 테스트하려고 시도하고 있으며 이미지를로드하는데도 속도가 크게 느려지고 있습니다. – user1799107

+0

밝은면에서는 효과가 좋습니다! 이미지 데이터를 일부 버퍼링 할 수있는 방법이 있습니다. 덕분에 다시 한번 큰 도움이되었습니다! \ – user1799107