首页 > 解决方案 > 设置 Uri (Android Studio) 后 ImageView 为空白

问题描述

所以我实际上实现了一个功能,用户从图库中选择图像,然后在这个活动中,如果用户点击裁剪按钮,这个库中的布局变得可见https://github.com/ArthurHub/Android-Image-Cropper然后用户可以裁剪,然后单击另一个按钮进行保存。但问题是在单击cropclose 后裁剪图像后,布局消失,imageview 显示裁剪后的图像,但它只显示空白图像。

编辑-感谢@Usama Altaf,我发现了问题

所以我添加了一个记录图像 uri 的日志,它说这个 24333-24333/com.margsapp.messenger D/imageUri: null 所以问题是 imageuri 是 null 如何解决这个问题?

public class SendImageActivity extends AppCompatActivity implements CropImageView.OnSetImageUriCompleteListener,
    CropImageView.OnCropImageCompleteListener {

ImageView imageView;

ImageView cancel, cropopen,cropclose, edit_open,edit_close;

EditText text;

ImageButton btn_send;

CropImageView cropImageView;

PhotoEditorView photoEditorView;

Uri imageUri;

Intent intent;

RelativeLayout messagebox;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_send_image);

    intent = getIntent();

    imageUri = Uri.parse(intent.getStringExtra("imageUri"));


    btn_send = findViewById(R.id.btn_send);

    imageView = findViewById(R.id.imageview);

    imageView.setImageURI(imageUri);
   
    cropopen = findViewById(R.id.cropopen);
    cropclose = findViewById(R.id.cropclose);
    cropImageView = findViewById(R.id.cropImageView);
   
    cropopen.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            

            cropImageView.setImageUriAsync(imageUri);

            cropImage();


        }
    });

    cropclose.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            imageView.setVisibility(View.GONE);
            cropImage();
            cropImageView.getCroppedImageAsync();






        }
    });



   

    

    


}

private void cropImage() {

    cropImageView.setOnSetImageUriCompleteListener(this);
    cropImageView.setOnCropImageCompleteListener(this);

}


@Override
public void onSetImageUriComplete(CropImageView view, Uri uri, Exception error) {
    if (error == null) {
        Toast.makeText(getApplicationContext(), "Image load successful", Toast.LENGTH_SHORT).show();
    } else {
        Log.e("AIC", "Failed to load image by URI", error);
        Toast.makeText(getApplicationContext(), "Image load failed: " + error.getMessage(), Toast.LENGTH_LONG)
                .show();
    }
}

@Override
public void onCropImageComplete(CropImageView view, CropImageView.CropResult result) {
    handleCropResult(result);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
        CropImage.ActivityResult result = CropImage.getActivityResult(data);
        handleCropResult(result);
    }
}

private void handleCropResult(CropImageView.CropResult result) {
    if(result.getError() == null){
        Toast.makeText(getApplicationContext(), "Image crop Success: ", Toast.LENGTH_LONG).show();

        imageUri = result.getUri();

        imageView.setImageURI(imageUri);
        

        cropImageView.setVisibility(View.GONE);
        imageView.setVisibility(View.VISIBLE);
       
        
    }

    else {
        Log.e("AIC", "Failed to crop image", result.getError());
        Toast.makeText(
                getApplicationContext(),
                "Image crop failed: " + result.getError().getMessage(),
                Toast.LENGTH_LONG)
                .show();
    }
}

}

标签: androidandroid-studioimageviewuricrop

解决方案


推荐阅读