ViewFlipper没有加载位图图像

时间:2012-11-15 09:08:38

标签: android imageview viewflipper db4o

当我尝试将图像添加到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);

} 

在我将图像添加到数据库之后它正常工作,但只是该图像,旧图像以及重新启动应用程序时,即使它表示它们来自我设置的调试日志,也不会加载。我认为最后一个显示,因为它仍然可以在某个地方的缓存中,但存储在数据库而不是缓存中的较旧的不能正确编码或其他东西。任何帮助都是极好的。谢谢!

编辑:我应该提到“test”是Bitmaps的一个arraylist。

1 个答案:

答案 0 :(得分:1)

好的,你在评论中说你将对象存储为Bitmap实例。我猜这是一个Android或库类。

不要那样做。仅存储您自己的类的实例。存储类的实例,java.util.collections,数组和原语是可以的。其他一切都是问题所在:db4o会热切地尝试存储任何对象。这是库实例的问题。您无法控制他们的工作,内部工作方式以及加载后是否仍然有效。

我认为这是发生在这里的事情。只要应用程序正在运行,db4o就会返回对象的缓存实例,这很好。重新启动应用程序后,db4o将加载Bitmap对象。但是,位图对象不打算与db4o一起存储,因此它会错误地存储错误存储的内部状态。

因此,将图片存储在字节数组中。或者就像SD卡上的普通文件一样。