2017-04-22 82 views
0

我有一个活动,其中包含一个用于显示用户照片的ImageView。 用户从手机图库中选择一个图像,当他完成后,图像上传到firebase存储并返回到ImageView。个人资料图片消失在背按按钮

问题是:当用户转到另一个活动(或按下后退按钮)并返回到UserProfile活动时,图像不再存在于ImageView内部。

如何在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

我还没有试过,但在选择图像分配一个位图变位从图库中的值,你可以做一件事创建位图类型的静态变量。 并在您的onStart活动首先检查该静态位图变量是否为空如果不是这样将位图放入您的图像查看

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

希望这些帮助你。

+0

如果即时通讯使用Uri从firebase存储中检索图像?我能做什么? – Nauruto

+0

然后你有请求firebase,然后从他们的图像。但是你甚至可以保存位图。 –

+0

林不太熟悉位图..你可以看看我的代码,并解释我需要做什么改变? – Nauruto