2012-11-15 42 views
0

大家好,我尝试添加一个图像到viewflipper页面时,有一些麻烦,我从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); 

} 

它的工作原理后立即将图片添加到数据库中,但只是图像,旧的图像,以及当我重新启动应用程序时,即使它说它是从我设置的调试日志中执行的,也不会加载。我想最后一个显示出来,因为它仍然可能在某处的缓存中,但存储在数据库中而不是在缓存中的较旧的不是正确编码或某种东西。任何帮助都是极好的。谢谢!

编辑:我应该提到“测试”是Bitmaps的数组列表。

+0

如何将图像存储在db4o中?作为字节数组?或者你尝试存储一个android类实例的对象。 – Gamlor

+0

我将图像作为位图对象存储在我在应用程序中使用的类结构之一中。 – user1799107

回答

1

好的,您在评论中说过,您将该对象存储为位图实例。我想这是一个Android或图书馆类。

不要这样做。只存储你自己的类的实例。存储类,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