【问题标题】:Error in onActivityResult following migration of StartActivityForResult迁移 StartActivityForResult 后 onActivityResult 出错
【发布时间】:2022-01-21 02:33:52
【问题描述】:

我修改了我的代码,使其适用于活动结果,但是我有一个错误,我无法在 profileImageView.setImageURI (ImageUri); 行上更正该错误;

他告诉我他需要 Uri 并且它来自 Intent

ActivityResultLauncher<Intent> mGetContent=registerForActivityResult(new 
ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() 
{
@Override
public void onActivityResult(ActivityResult result) {
   if (result.getResultCode()==RESULT_OK && result.getData()!=null){
   Intent ImageUri=result.getData();
       profileImageView.setImageURI(ImageUri);
   }
  }
 });


       public void onClick(View v) {

       Intent galleryIntent = new Intent();
       galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
       galleryIntent.setType("image/*");
   //    startActivityForResult(galleryIntent,GalleryPick);

       mGetContent.launch(galleryIntent);
   }

感谢您的帮助

【问题讨论】:

  • 您是否有理由不使用预建的GetContent contract?它会为您处理所有解析并直接为您提供Uri

标签: java android startactivityforresult


【解决方案1】:

请在 onActivityResult() 方法中更改您的代码,如下所示。

if(result.getResultCode() == Activity.RESULT_OK){
  Intent data = result.getData();
  if(data != null){
    Uri imageUri = data.getData();
     if(imageUri != null){
       try{
         InputStream inputStream = YourActivityName.this.getContentResolver().openInputStream(imageUri);
         BitMap bitMap = BitmapFactory.decodeStream(inputStream);
         profileImageView.setImageBitmap(bitMap);
      }catch(Exception e){
        e.printStackTrace();
      }
    } 
  }
}

而且,您的 OnClick() 方法应该如下所示:

  public void onClick(View v) {
    Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    mGetContent.launch(intent);
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    相关资源
    最近更新 更多