2010-08-02 17 views
9

सहेजा जा रहा है फ़ाइल:BitmapFactory.decodeFile रिटर्न अशक्त भी छवि मौजूद है

FileOutputStream fo = null; 
try { 
     fo = this.openFileOutput("test.png", Context.MODE_WORLD_READABLE); 
} catch (FileNotFoundException e) { 
     e.printStackTrace(); 
} 
bitmap.compress(CompressFormat.PNG, 100, fo) 

फ़ाइल लोड हो रहा है:

String fname = this.getFilesDir().getAbsolutePath()+"/test.png"; 
Bitmap bMap = BitmapFactory.decodeFile(fname); 
i.setImageBitmap(bMap); 

अंतिम पंक्ति में नल पॉइंटर एक्सेप्शन देता है, क्यों BitmapFactory.decodeFile लौटने बातिल? मैं सत्यापित कर सकता हूं कि फ़ाइल सही ढंग से सहेजी जा रही है क्योंकि मैं इसे एडीबी का उपयोग करके खींच सकता हूं और पीएनजी को सही तरीके से प्रदर्शित कर सकता हूं।

+0

क्या आपने फ़ाइल आउटपुट स्ट्रीम बंद कर दी है? "मैं" क्या सेट है, और इसका एक चरित्र नाम क्यों है? – Douglas

+0

हां यह बंद है। मैं एक छवि दृश्य था, जिसे शून्य पर सेट किया गया था, क्योंकि मैंने इसे गलत तरीके से संदर्भित किया था। – stealthcopter

उत्तर

18

तो NullPointerException इस लाइन पर सीधे है:

i.setImageBitmap (bMap);

तब आपकी समस्या यह है कि inull है। यह देखते हुए कि आप setImageBitmap() को कॉल कर रहे हैं, मुझे लगता है कि i एक ImageView है - सुनिश्चित करें कि आपका findViewById() कॉल काम कर रहा है।)

स्ट्रिंग fname = नई फ़ाइल (getFilesDir(), "test.png") getAbsolutePath (;:

इसके अलावा, आप fname प्राप्त करने के लिए निम्नलिखित का उपयोग करना चाहिए।

2

DecodeFile विधि में विकल्प पैरामीटर का उपयोग करते समय यह सुनिश्चित करें कि InJustDecodeBounds संपत्ति झूठी पर सेट किया जाता है या नहीं तो यह हमेशा अशक्त वापस आ जाएगी हो। यह तब सही हो सकता है जब आप फ़ाइल को डीकोड करने के लिए चाहते हैं लेकिन आपको अपने ऐप/कोड में इसकी आवश्यकता नहीं है। इस तरह कोई अतिरिक्त मेमोरी आवंटित करने की आवश्यकता नहीं है। उदाहरण के लिए here देखें।