我想保存两张图片,以便在屏幕旋转后它们仍然显示在图像视图中。不知怎的,它不起作用,我不知道为什么。 onRestoreInstanceState也不起作用。有人能帮助我吗?
这是我的代码:
private byte[] mapImage;
private byte[] photo;
private Bitmap imageBitmap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_entry);
if(savedInstanceState !=null) {
photo = savedInstanceState.getByteArray(STATE_PHOTO);
viewPhoto.setImageBitmap(DbBitmapUtility.getImage(photo));
mapImage = savedInstanceState.getByteArray(STATE_MAP);
viewGPS.setImageBitmap(DbBitmapUtility.getImage(mapImage));
}
@Override
protected void onSaveInstanceState(Bundle outState) {
if(imageBitmap!=null) {
photo = DbBitmapUtility.getBytes(imageBitmap);
outState.putByteArray(STATE_PHOTO, photo);
}
if(mapImage !=null) {
outState.putByteArray(STATE_MAP, mapImage);
}
super.onSaveInstanceState(outState);
}
private void showMapView() {
Bundle getImageOfMap = getIntent().getExtras();
if (getImageOfMap != null) {
mapImage = (byte[]) getImageOfMap.get("map_image");
Bitmap showMapImage = DbBitmapUtility.getImage(mapImage);
viewGPS.setVisibility(View.VISIBLE);
viewGPS.setImageBitmap(showMapImage);
}
}
编辑: 我把super.onSaveInstanceState(outState);在onSaveInstanceState(Bundle outState)方法的基础上,现在mapImage在旋转后显示,但imageBitmap仍未显示。我发现imageBitmap已保存,但在onCreate中它是null。 有人知道解决方案吗?
谢谢!
答案 0 :(得分:0)
你有一个错字。我认为您应该检查imageBitmap != null
而不是photo != null
:
protected void onSaveInstanceState(Bundle outState) {
if(imageBitmap!=null) {
photo = DbBitmapUtility.getBytes(imageBitmap);
outState.putByteArray(STATE_PHOTO, photo);
}
if(mapImage !=null) {
outState.putByteArray(STATE_MAP, mapImage);
}
super.onSaveInstanceState(outState);
}
编辑:
另外,请确保onCreate()
,初始化viewPhoto
(以及其他变量)
viewPhoto = (ImageView) findViewById(R.id.viewPhoto);
在if
块内访问之前。
答案 1 :(得分:0)
IMO这是一个威胁问题。也许你的图像尺寸更大。尝试将bytearray保存在其他一些线程中。最好使用AsyncTask来保存byre数组。
答案 2 :(得分:0)
除非您的应用在Android的API21 +版本上运行,否则
public void onSaveInstanceState(Bundle outState,PersistableBundle outPersistentState);
不会被调用,因为它在早期版本的平台上根本不存在。为了支持API21之前的设备,您必须覆盖以下方法,而不是上述方法:
public void onSaveInstanceState(Bundle outState);
这也适用于API21 +,因此您不需要覆盖这两种方法(除非您知道需要处理新提供的PersistableBundle)。
你能否确认一下onSaveInstanceState调用意味着它是否被调用?