का कारण बनता है मैं एक imageView और एक बटन के साथ एक बहुत ही सरल अनुप्रयोग है। मेरी imageView द्वारा लोड पहले Drawable संसाधन के साथ निर्दिष्ट किया जाता है "एंड्रॉयड: src" एक्सएमएल लेआउट में टैग, तथापि रनटाइम पर मैं परिवर्तन चित्र यह द्वारा प्रदर्शित करना चाहते हैं। ऐसा करने के लिए मैं एसडी कार्ड से एक छवि लेने के लिए परिणाम के लिए एक गतिविधि शुरू करता हूं (MediaStore.Images.Media.EXTERNAL_CONTENT_URI को भेजा गया इरादा)। लेकिन जब चित्र चुना जाता है, मैं चुना चित्र के यूआरआई के साथ imageView अपडेट करने का प्रयास, लेकिन मैं संदेश मिलता है:बदलने imageView सामग्री OutOfMemoryError
I'am लिए गए चित्रों लोड करने का प्रयास "java.lang.OutOfMemoryError बिटमैप आकार वीएम बजट से अधिक है" कैमरे के साथ मेरी एचटीसी-हीरो, लेकिन कोई सफलता का (चित्र आकार 1.1M के आसपास रहे हैं), केवल कि 500KB.However मैं कैमरे से लिए गए चित्रों को लोड करने की जरूरत की तुलना में कम कर रहे हैं चित्रों के साथ काम करने के लिए लगता है। मैं इसे कैसे हल कर सकता हूं? मैं क्या गलत कर रहा हूँ। मुझे लगता है कि कोड बहुत सरल है और काम करना चाहिए।
public void onClick(View v){
Intent selectImageIntent=new Intent(Intent.ACTION_PICK ,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(selectImageIntent,1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==Activity.RESULT_OK){
Uri selectedImageUri = data.getData();
Log.i(TAG,"chosen image: "+selectedImageUri.toString());
ImageView imageView = (ImageView) this.findViewById(R.id.ImageView01);
imageView.setImageURI(selectedImageUri);//here I get the OutOfMemoryError
imageView.invalidate();
}else{
//canceled
}
}
पेज। ऐप को एकमात्र चीज करना चाहिए, मैं अन्य ऑब्जेक्ट्स नहीं बना रहा हूं इसलिए मैं यह इंगित करना चाहूंगा कि मैं छवि को प्रदर्शित करने के अलावा अन्य सामानों के लिए हीप स्पेस का उपयोग नहीं कर रहा हूं।
यह विधि आपको सहेज लेगी यदि आप ImageViews के साथ FragmentStatePagerAdapter का उपयोग कर रहे हैं क्योंकि बिटमैप रीसाइक्लिंग के बाद दृश्य को फिर से भरने में त्रुटि होगी। –