2016-09-20 2 views
0

J'ai un problème étrange. J'essaie d'utiliser un fichier PNG de mon dossier res/drawable dans mon projet Android, et pour utiliser un tel fichier PNG dans un ImageButton (qui a la méthode "setImageBitmap (Bitmap bm)") j'ai besoin de décoder l'image PNG J'ai dans mon fichier res/drawable. Cependant, quand je copie le chemin et essayer de le décoder comme tel:Bitmap Factory lève FileNotFoundException

public Bitmap getBitMap() { 
    return BitmapFactory.decodeFile("drawable/bishop00.png"); 
} 

j'ai vu des fils qui dit que je pouvais aussi utiliser la méthode « decodeResources » de BitmapFactory, mais ce code n'est pas une activité, et je ne souhaite pas utiliser une activité comme paramètre pour simplement utiliser cette méthode, vu que cela devrait fonctionner. J'ai aussi essayé d'utiliser le chemin absolu à ce (la copie du chemin qui montre toute la hiérarchie de mon système) mais je reçois toujours l'exception suivante:

Unable to decode stream: java.io.FileNotFoundException 

vraiment espèrent obtenir de l'aide, car je suis complètement Assurez-vous que le fichier existe.

+0

Le fichier drawable/bishop00.png existe-t-il sur votre téléphone? – immibis

+0

Non, je suis en train de le décoder à partir de mon projet Android (que j'ai dit dans le message original) et ensuite l'afficher dans mon application – tomSurge

+1

J'ai corrigé le titre de la question. Il n'y a rien de bizarre à lancer 'FileNotFoundException'. Le fichier n'existe pas et l'exception est lancer – Budius

Répondre

1

Je suis en train d'utiliser un fichier PNG de mes res/dossier drawable dans mon projet Android

C'est un fichier sur votre machine de développement. Ce n'est pas un fichier sur l'appareil Android.

car cela devrait fonctionner

Non, il ne devrait pas.

j'ai vu des fils qui dit que je pourrais aussi utiliser la méthode « decodeResources » de BitmapFactory

C'est la bonne réponse, en supposant que ce contenu doit être une ressource drawable en premier lieu. Bien qu'il existe des raisons valables d'utiliser decodeResource(), il n'est pas communément utilisé dans son ensemble. Il peut y avoir d'autres façons d'utiliser la ressource drawable qui sont plus appropriées, ou peut-être cela ne devrait pas être une ressource drawable en premier lieu.

mais ce code n'est pas une activité

decodeResource() prend un Context. Il ne doit pas être un Activity, bien que ce soit habituellement un candidat probable. Tout votre code est exécuté le long d'un chemin de code qui a démarré avec un Context; vous ne devriez pas avoir de problèmes pour en avoir un ici.

+0

Merci pour votre contribution. Avez-vous d'autres suggestions que d'utiliser "decodeResources"? – tomSurge

+0

@tomSurge La suggestion est d'utiliser decodeResources. – immibis

+0

@ tomSurge: Je ne peux pas répondre rapidement à cette question, sans savoir ce que vous essayez de faire globalement. Que comptez-vous faire avec 'Bitmap'? – CommonsWare