android - 设置 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();
}
}
}
解决方案
推荐阅读
- flutter - 从底部表单弹出后如何更改文本字段文本值
- google-drive-api - Google 未显示 OAuth 同意屏幕
- javascript - 渲染()功能在反应中无法正常工作
- python-3.x - 在 Tkinter 中动态更改标签值
- javascript - jquery 循环点击事件不适用于 eq(i)
- sql - 此列列表没有匹配的唯一键或主键(尝试添加两个 FK)
- tensorflow - 理解 hub.KerasLayer 的 input_shape 参数
- spring-mvc - 为什么在 Spring Web MVC 中不调用 Controller
- php - Woocommerce Shop 页面仍然显示旧的主题设计
- haskell-stack - 使用堆栈安装haskell的问题