如果我不选择任何图片,然后单击后退按钮,它坠毁
FATAL EXCEPTION: main
Process: com.example.keepair.myapplication, PID: 31796
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=66536, result=0, data=null} to activity {com.example.keepair.myapplication/com.example.keepair.myapplication.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference
CODE:
mGetImageFromGalleryButton = (Button) view.findViewById(R.id.btn_getgallery);
mGetImageFromGalleryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(ActivityCompat.checkSelfPermission(getActivity(),
Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
{
requestPermissions(
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
2000);
}
else {
startGallery();
}
}
});
private void startGallery() {
Intent cameraIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
cameraIntent.setType("image/*");
if (cameraIntent.resolveActivity(getActivity().getPackageManager()) != null) {
startActivityForResult(cameraIntent, 1000);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == Activity.RESULT_OK) {
if(requestCode == 1000){
Uri returnUri = data.getData();
Bitmap bitmapImage = null;
try {
bitmapImage = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), returnUri);
} catch (IOException e) {
e.printStackTrace();
}
mImageview.setImageBitmap(bitmapImage);
}
returnUri = data.getData();
Glide.with(this)
.load(returnUri)
.override(1280, 1280)
.centerCrop()
.crossFade()
.into(mImageview);
}
else { #What is good for this space? }
}
我的代码做什么,如果用户点击mGetImageFromGalleryButton
在GalleryFragment
,用户可以去图库并选择一张图片,然后回到GalleryFragment
与该图片的uri。
问题: 如果用户点击mGetImageFromGalleryButton
等去画廊,但不要选择任何图片,然后在Android后退按钮时,Error message
我上面说的发生了。所以,我想我必须修改public void onActivityResult
的if子句。如果我认为是正确的,有什么好的else { #What is good for this space? }
你能帮助我吗?
当您不选择任何图像时,数据为空。这就是它给出错误的原因。如果您的数据不为空,请在您的代码周围添加条件。
E.g
if(data != null){
//Proceed with your image crop etc
}
谢谢。 Saadi –
@ H.fate欢迎您。 – Saadi
@Override public void onActivityResult(int requestCode, int resultCode, Intent data)
{
Uri returnUri = data.getData();
switch (requestCode)
{
case 1000:
if (resultCode == RESULT_OK && returnUri != null)
{
Bitmap bitmapImage = null;
try
{
bitmapImage = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), returnUri);
}
catch (IOException e)
{
e.printStackTrace();
}
mImageview.setImageBitmap(bitmapImage);
Glide.with(this)
.load(returnUri)
.override(1280, 1280)
.centerCrop()
.crossFade().into(mImageview);
}
break;
default:
super.onActivityResult(requestCode, resultCode, data);
break;
}
}//onActivityResult
谢谢你的回答,乔恩古德温。 –
您又犯了错误,data.getData()中的数据为null时发生异常。你必须检查数据 –
@Joyal C约瑟不,我不这么认为,你发现了什么吗?我认为我只对returnUri做了次要引用,这是可以的(&& returnUri!= null)括号和all /; O)再次阅读代码! –
我认为这是乌里通过returnUri = data.getData();这是导致崩溃的线路 – myatmins
@ septemberboy7感谢您的咨询! –
当没有选择任何内容时,捕获返回的空数据;编写好代码的一部分是处理空值 – Eenvincible