当我尝试将图像添加到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。
答案 0 :(得分:1)
好的,你在评论中说你将对象存储为Bitmap实例。我猜这是一个Android或库类。
不要那样做。仅存储您自己的类的实例。存储类的实例,java.util.collections,数组和原语是可以的。其他一切都是问题所在:db4o会热切地尝试存储任何对象。这是库实例的问题。您无法控制他们的工作,内部工作方式以及加载后是否仍然有效。
我认为这是发生在这里的事情。只要应用程序正在运行,db4o就会返回对象的缓存实例,这很好。重新启动应用程序后,db4o将加载Bitmap对象。但是,位图对象不打算与db4o一起存储,因此它会错误地存储错误存储的内部状态。
因此,将图片存储在字节数组中。或者就像SD卡上的普通文件一样。