0

こんにちは、viewflipper ページに画像を追加しようとしたときに問題が発生しました。db4o データベースからビットマップを取得しています (エンコーディングまたはそれが使用しているものであるかどうかはわかりません)。

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

} 

画像をデータベースに追加した直後に機能しますが、その画像、古い画像、およびアプリケーションを再起動したときに、設定したデバッグ ログから読み込まれると表示されていても読み込まれません。最後のものはまだどこかのキャッシュにある可能性があるため表示されると考えていますが、キャッシュではなくデータベースに保存されている古いものは正しくエンコードされていないか、何かです。どんな助けでも素晴らしいでしょう。ありがとう!

編集:「テスト」はビットマップの配列リストであることを言及する必要があります。

4

1 に答える 1

1

わかりました、コメントで、オブジェクトをビットマップインスタンスとして保存すると言いました。Androidまたはライブラリクラスだと思います。

そうしないでください。独自のクラスのインスタンスのみを保存します。クラス、java.util.collections、配列、およびプリミティブのインスタンスを保存しても問題ありません。それ以外はすべて問題があります: db4o は熱心にオブジェクトを格納しようとします。これは、ライブラリ インスタンスの問題です。それらが何をするか、それらが内部でどのように機能するか、ロード後も機能するかどうかを制御することはできません。

それがここで起こっていることだと思います。アプリケーションが実行されている限り、db4o はオブジェクトのキャッシュされたインスタンスを返しますが、これは問題ありません。アプリケーションの再始動後、db4o は Bitmap オブジェクトをロードします。ただし、ビットマップ オブジェクトは db4o で保存することを意図していないため、誤って保存された内部状態に遭遇します。

したがって、画像をバイト配列に保存します。または、SD カード上の普通のファイルと同じように。

于 2012-11-15T21:01:23.973 に答える