2011-12-09 9 views
18

से शून्य वापस लौट रहा है जब मैं इस फ़ंक्शन को कॉल कर रहा हूं तो छवि दृश्य bitmapFactory.decodefile(filename) में कोई छवि नहीं है .. कृपया इसके लिए सहायता करें।बिटमैप BitmapFactory.decodeFile (फ़ाइल नाम)

public Bitmap ShowImage(String imageName,String userImageName) 
{ 

    File sdcard_mainDirectory = new File(Environment.getExternalStorageDirectory(),"UserImages").getAbsoluteFile(); 

    File file = new File(sdcard_mainDirectory, userImageName).getAbsoluteFile(); 

    if (file != null) { 

     try { 

      String imageInSD = "/sdcard/UserImages/"+userImageName; 

      Bitmap bitmap = BitmapFactory.decodeFile(imageInSD); 

      return bitmap; 

     } 
     catch (Exception e) { 

      e.printStackTrace(); 
     } 

    } 

    return null; 

} 
+0

स्टैकट्रेस पोस्ट करें। – st0le

उत्तर

26

नमस्ते यह null है क्योंकि छवि का आकार बड़ा हो सकता है और अपवाद हो रहा है कृपया अपने लॉग की जांच करें और देखें कि क्या आउटफमेमरी बिटमैप की कोई त्रुटि है यदि हां तो इसके लिए विकल्प का उपयोग करें:

BitmapFactory.Options options; 

try { 
    String imageInSD = "/sdcard/UserImages/" + userImageName; 
    Bitmap bitmap = BitmapFactory.decodeFile(imageInSD); 
    return bitmap; 
} catch (OutOfMemoryError e) { 
    try { 
    options = new BitmapFactory.Options(); 
    options.inSampleSize = 2; 
    Bitmap bitmap = BitmapFactory.decodeFile(imageInSD, null, options); 
    return bitmap; 
    } catch(Exception e) { 
    Log.e(e); 
    } 
} 
4

यह सरल है::

यहाँ मेरी कोड है आपकी फ़ाइल या तो एक छवि या छवि है जो Android के बिटमैप कार्यान्वयन द्वारा समर्थित नहीं है नहीं है, या आप पथ अमान्य है। BitmapFactory.decodeFile(String file) के लिए


दस्तावेज़ देखें:

रिटर्न
जिसके परिणामस्वरूप डीकोड बिटमैप, या नल अगर यह डीकोड नहीं किया जा सकता है।


आमतौर पर जब बिटमैप डीकोड नहीं किया जा सकता है कुछ लॉग logcat को मुद्रित कर रहे हैं। सावधानी से उनका निरीक्षण करें।

+0

"आमतौर पर जब बिटमैप को डीकोड नहीं किया जा सकता है तो कुछ लॉग लॉगकैट पर मुद्रित होते हैं। सावधानी से उनका निरीक्षण करें।"यह महत्वपूर्ण वाक्य मेरा है, धन्यवाद :) – oguzhan

9

आप यह क्यों कर रहे हैं स्ट्रिंग imageInSD = "/ sdcard/userImages /" + userImageName;

मुझे लगता है कि एक .png फ़ाइल यदि आप मिल मौजूद है तो बस,

Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); 

नोट: यह भी जांच .. आप एक एंड्रॉयड समर्थित छवि फ़ाइल उस स्थान में मौजूद है है

+1

बाह्य भंडारण से कैश की गई छवियों को लोड करते समय, file.getAbsolutePath() ने इसे मेरे लिए तय किया, भले ही GetPath() सही था। – scottyab

7

एसडी कार्ड एक्सेस अनुमतियां READ_EXTERNAL_STORAGE और/या WRITE_EXTERNAL_STORAGE जोड़ने का प्रयास करें। यह मेरे लिए काम करता है।

5

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

1

BitmapFactory.decodeFile() कि सटीक रास्ते में पूरी छवि रखने से पहले निष्पादित करता है पर रन टाइम अनुमति की जांच याद आ रही थी। जब decodeFile() निष्पादित करता है तो कोई छवि नहीं होती है। तो बिटमैप null देता है। आम तौर पर उच्च पिक्सेल छवियों को अपने पथ में रखने के लिए कुछ अतिरिक्त समय लगता है। तो यह अपवाद होता है।

कृपया शून्य की जांच करें और decodeFile को आजमाएं।

Bitmap bitmap = null; 

while(bitmap == null) 
    bitmap = BitmapFactory.decodeFile(imageInSD);