2010-08-02 8 views
9

Enregistrement du fichier:BitmapFactory.decodeFile renvoie null même image existe

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

Chargement du fichier:

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

La dernière ligne donne une exception de pointeur nul, pourquoi est-BitmapFactory.decodeFile retour nul? Je peux vérifier que le fichier est enregistré correctement car je peux le tirer en utilisant adb et voir le png s'afficher correctement.

+0

Avez-vous fermé le flux de sortie de fichier? Qu'est-ce que "i" et pourquoi a-t-il un seul nom de personnage? – Douglas

+0

Oui c'est fermé. J'étais une vue d'image, qui a été mise à null, parce que je l'ai référencé incorrectement. – stealthcopter

Répondre

18

Si le NullPointerException est directement sur cette ligne:

i.setImageBitmap (bmap);

Ensuite, votre problème est que i est null. Étant donné que vous appelez setImageBitmap(), je devine que i est un ImageView - assurez-vous que votre appel findViewById() fonctionne.

En outre, vous devez utiliser ce qui suit pour obtenir fname:

Chaîne FNAME = new File (getFilesDir(), "test.png") getAbsolutePath();.

2

Lorsque vous utilisez les options paramètre dans la méthode DecodeFile assurez-vous que le InJustDecodeBounds propriété est définie sur faux ou sinon il retournera toujours nulle. Cela peut être défini sur true lorsque vous souhaitez simplement que le fichier soit décodé mais que vous n'en ayez plus besoin dans votre application/code. De cette façon, aucune mémoire supplémentaire n'a besoin d'être allouée. Voir here pour un exemple.