के बाद नहीं बुलाया जाता है, मैं एक छवि संपादन एंड्रॉइड एप्लिकेशन पर काम कर रहा हूं। मेरी गतिविधियों में से एक में मैं इस तरह onCreate में गैलरी से एक छवि लेने के लिए कोई लक्ष्य फोन:OnActivityResult को कभी-कभी ACTION_GET_CONTENT इरादे
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;
}
अब मेरी समस्या यह है कि कभी-कभी मैं क्रैशलिटिक्स में एनपीई-एस देखता हूं कि फोटोबिटमैप शून्य है जब उपयोगकर्ता अगले बटन दबाता है।
@OnClick(R.id.toolbar_next)
void onToolbarNextClick() {
float originalScale = (float) (previewImageView.getHeight())/(float) (photoBitmap.getHeight());
...
}
केवल Crashlytics लॉग इन करें मुझे लगता है कि उपयोगकर्ता के इरादे (मैं अंदर एक Crashlytics लॉग रखा) के लिए छोड़ देता है। onActivityResult
के लिए कोई लॉग इन नहीं है, इसलिए मेरा सबसे अच्छा अनुमान यह है कि onActivityResult
नहीं कहा जाता है, इस प्रकार मेरा बिटमैप लोड नहीं होता है, इस प्रकार जब उपयोगकर्ता आगे दबाता है तो यह शून्य हो जाएगा।
प्रश्न: onActivityResult
क्यों कभी-कभी कहा जाता है, और कभी-कभी नहीं? क्या photoBitmap
के किसी भी अन्य संभावित कारण हैं?
अपवाद तब होता है जब उपयोगकर्ता इस स्क्रीन से अगले स्थान पर जाता है। यदि यह बिटमैप लोडिंग के कारण था, तो हम उस परमाणुता के बारे में पता लगाएंगे जैसा कि आप कोड नमूना में देख सकते हैं। – WPMed
हां मैं इसे ओवरराइड कर रहा हूं- – WPMed
यदि यह काम नहीं कर रहा है, तो बैकप्रेस दबाए जाने पर, मैं क्रैशलीटिक्स लॉग देखता हूं कि एक्टिविटी रिसेट को – WPMed