我有一个包含用于显示用户照片的ImageView的活动。 用户从电话库中选择一个图像,完成后将图像上传到firebase存储并返回ImageView。
问题是:当用户转到另一个活动(或按下后退按钮)并返回到UserProfile活动时,ImageView中不再存在该图像。
如何在UserProfile活动开始时加载图像?
这是我的UserProfile活动
public class UserProfile extends AppCompatActivity {
private static final int GALLERY_INTENT = 2 ;
private ImageButton userImage;
private Button save_changes;
private EditText user_name;
private StorageReference mStorage;
private Uri mImageUri ,downloadUri;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_profile);
mAuth = FirebaseAuth.getInstance();
userImage = (ImageButton) findViewById(R.id.profileImage);
save_changes = (Button) findViewById(R.id.savechanges);
user_name = (EditText) findViewById(R.id.user_name2);
mStorage = FirebaseStorage.getInstance().getReference();
userImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent galleryIntent = new Intent();
galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
galleryIntent.setType("image/*");
startActivityForResult(galleryIntent, GALLERY_INTENT);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == GALLERY_INTENT && resultCode == RESULT_OK){
Uri imageUri = data.getData();
CropImage.activity(imageUri)
.setGuidelines(CropImageView.Guidelines.ON).
setAspectRatio(1,1)
.start(this);
}
if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if (resultCode == RESULT_OK) {
mImageUri = result.getUri();
}
else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
Exception error = result.getError();
}
}
save_changes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String s = user_name.getText().toString();
StorageReference filepath = mStorage.child("photos").child(mAuth.getCurrentUser().getUid()).child(mImageUri.getLastPathSegment());
filepath.putFile(mImageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
downloadUri = taskSnapshot.getDownloadUrl();
Picasso.with(UserProfile.this).load(downloadUri).into(userImage);
Toast.makeText(UserProfile.this,"התמונה עלתה בהצלחה",Toast.LENGTH_SHORT).show();
}
});
}
});
}
}
答案 0 :(得分:0)
我还没试过这个但你可以做一件事,当选择图像时创建一个Bitmap类型的静态变量,从图库中为位图变量分配位图值。 在您的onStart活动中,首先检查静态位图变量是否为null,如果不是这样,将位图放入imageView
答案 1 :(得分:0)
当您从当前活动启动另一个活动时,您之前的活动将被销毁。所以所有变量和设置到图像视图的图像也都是垃圾收集。
为此你可以将你的位图保存在onSaveInstance()
中在您的活动中覆盖以下方法
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putParcelable("BitmapImage", bitmap);
}
在onCreate()中写下面的代码,我们可以得到保存的位图
if (savedInstanceState != null) {
image = savedInstanceState.getParcelable("BitmapImage");
targetImage.setImageBitmap(image); // set the bitmap.
}
如果您有imagePath,我们也可以保存它并使用相同的方法获得它。
希望这些可以帮助你。