-
Accès à une ressource
Bonjour,
Souhaitant porter une application Java sous Androïd, je suis confronté au problème suivant :
Mon activity instancie une classe "100% java". Cette dernière doit accéder à un fichier contenu dans le ".jar / .apk".
En java pur, j'utilisais : getClass().getResourceAsStream(fichier)
Cela ne fonctionne pas sous Android, et après consultation de la doc, je trouve getResources().openRawResource(id) qui semble correspondre. Seulement je ne peux pas utiliser ce code dans ma classe qui n'est pas une 'activity' ....
Pourriez-vous me dépanner SVP ?
Merci
-
En fait je croix que tu peux utiliser, au moins, getClass().getClassLoader().getResourceAsStream(file); je l'utilises moi-même et il fonctionne bien. Et-tu certain que ton ressource est sur le classpath?
Sinon, pour utiliser getResources().openRawResource(id) tu as raison, il faut un instance d'un Context (soit ApplicationContext ou Activity). Est-ce que tu peux passer un Context à ton Java l'applicationContext dans son constructeur ou un méthods et faire quelque chose comme ça?
inputStream=context.getResources().openRawResource(id);
-
Merci pour ta réponse,
Je laisse pour le moment le côté "feinte" pour pouvoir utiliser openRawResource.
Pour en revenir au problème avec getClass().getResourceAsStream() , l'execution ne lève pas d'exception, par contre le InputStream renvoyé est null.
En recherchant sur le net, je suis tombé la dessus :
http://code.google.com/p/android/issues/detail?id=10076
Ca correspond tout à fait à mon problème ... malheureusement mon niveau débutant ne me permet pas de comprendre la solution (car visiblement il y en a une).
Merci pour votre aide. (Pour info je suis sous Eclipse)
-
Je trouve ce bug un peu étonnant - je n'ai pas de tout de problème avec des ressources dans le classpath. Je peux seulement imaginer que c'est limité à Netbeans.
As-tu vérifier que ton ressource est bien dans l'apk? Pour l'ouvrir, il ne faut que changer l'extension à .zip et utiliser une application comme winrar.
-
J'ai bien vérifié ... les ressources sont bien présentes dans le .apk.
Par contre bonne nouvelle, j'ai "résolu" le problème :
-> getClass().getClassLoader().getResourceAsStream() renvoie 'null' (alors que çà marche bien en Java pur).
-> getClass().getResourceAsStream() fonctionne ...
Aucune idée du pourquoi ou du comment, çà dépasse mes compétences ;-)
Si quelqu'un tombe là-dessus et qu'il a une explication je suis preneur.
Merci pour ton aide