我刚开始在Android上开发。到目前为止我正在学习东西。我遇到了这个问题。在我的onCreate方法中,我有一个按钮来选择设备中的图像和onActivityResult来获取图像并在ImageView中显示图像
在互联网上研究和寻找答案后,有人建议我错过了onSaveInstanceState。所以我创造了它。这是我的代码。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button buttonLoadImage = (Button)findViewById(R.id.buttonLoadPicture);
targetImage = (ImageView) findViewById(R.id.imgView);
buttonLoadImage.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, RESULT_LOAD_IMG);
}
});
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
savedInstanceState.putParcelable("BitmapImage", bitmap);
super.onSaveInstanceState(savedInstanceState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
image = savedInstanceState.getParcelable("BitmapImage");
targetImage.setImageBitmap(image);
}
@Override
protected void onActivityResult( int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try {
if (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK){
Uri targetUri = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(targetUri, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
imgDecodableString = cursor.getString(columnIndex);
cursor.close();
this.bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri));
targetImage.setImageBitmap(bitmap);
}
}
catch (FileNotFoundException e){
e.printStackTrace();
}
}
构建并运行代码后,选择图像并在ImageView中显示它可以正常工作。当我更改方向时,仍会显示所选图像。然而,当我再次旋转时,显示的图像消失了。 我在哪里做错了。任何建议和帮助表示赞赏。
答案 0 :(得分:1)
你正确存储'位图'吗?在这里,您将其存储到本地变量:
Bitmap bitmap;
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri));
targetImage.setImageBitmap(bitmap);
在这里你使用的是一个字段:
savedInstanceState.putParcelable("BitmapImage", bitmap);
看起来字段未设置,因此onSaveInstanceState
存储空值。尝试删除Bitmap bitmap;
或将bitmap = BitmapFactory...
更改为this.bitmap = BitmapFactory
。
编辑:
还尝试在此处存储位图:
image = savedInstanceState.getParcelable("BitmapImage");
targetImage.setImageBitmap(image);
将其更改为:
image = savedInstanceState.getParcelable("BitmapImage");
this.bitmap = image;
targetImage.setImageBitmap(this.bitmap);
我不确定是什么图像,因为你没有在帖子中包含延期。