gpt4 book ai didi

java - 在 ACTION_GET_CONTENT Intent 之后有时不会调用 OnActivityResult

转载 作者:IT老高 更新时间:2023-10-28 23:16:32 26 4
gpt4 key购买 nike

我正在开发一个图像编辑 Android 应用程序。在我的一项 Activity 中,我调用了从 onCreate() 中的图库中选择图像的 Intent ,如下所示:

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE);

然后我收到这样的数据:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Crashlytics.log("onActivityResult called");
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == PICK_IMAGE && resultCode == Activity.RESULT_OK && data != null) {
Crashlytics.log("Data received from image pick intent");
imageUri = data.getData();
loadImage();
} else {
//if we do not select a picture, go back to the dashboard
Crashlytics.log("Data not received");
onBackPressed();
Log.d(TAG, "no picture selected");
}
}

loadImage 方法:

private void loadImage() {
try {
photoBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
} catch (IOException e) {
Crashlytics.log("IOException from getBitmap");
Log.d(TAG, e.getMessage());
showToastAndPressBack();
return;
}

if (photoBitmap == null) {
Crashlytics.log("photoBitmap is null in onActivityResult");
showToastAndPressBack();
return;
}

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
imgVWidth = size.x;
int height = size.y;
imgVHeight = (int) (((float) imgVWidth / photoBitmap.getWidth()) * photoBitmap.getHeight());
photoInImgViewBitmap = Bitmap.createScaledBitmap(photoBitmap, imgVWidth, imgVHeight, true);
imageAlreadyPicked = true;
}

现在我的问题是,有时我在 Crashlytics 中看到 NPE-s 声称当用户按下下一个按钮时 photoBitmap 为空。

@OnClick(R.id.toolbar_next)
void onToolbarNextClick() {
float originalScale = (float) (previewImageView.getHeight()) / (float) (photoBitmap.getHeight());
...
}

我看到的唯一 Crashlytics 日志是用户离开的 Intent (我在 onPause 中放置了一个 Crashlytics 日志)。 onActivityResult 没有日志,所以我最好的猜测是 onActivityResult 没有被调用,因此我的位图没有加载,因此当用户按下下一步时它将为空。

问题:为什么有时调用onActivityResult,有时不调用? photoBitmap 为空是否还有其他可能的原因?

最佳答案

您必须添加以下代码才能从设备中获取图像

choosebtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i1=new Intent();
i1.setType("image/*");
i1.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(i1,1);
}
});


@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1 && resultCode == RESULT_OK && data != null && data.getData() != null)
{
imguri=data.getData();
mainpreview.setImageURI(data.getData());
} else {
Toast.makeText(getApplicationContext(),"please choose image",Toast.LENGTH_SHORT).show();
}
}

关于java - 在 ACTION_GET_CONTENT Intent 之后有时不会调用 OnActivityResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47650288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com