个人资料图片在backPress按钮上消失了

时间:2017-04-22 10:50:58

标签: java android firebase imageview

我有一个包含用于显示用户照片的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();

                    }
                });

            }
        });

    }

}

2 个答案:

答案 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,我们也可以保存它并使用相同的方法获得它。

希望这些可以帮助你。