Ressources NotFoundException?
Je reçois des rapports de plantage à partir de l'android marketplace:
android.content.res.Resources$NotFoundException: Resource ID #0x....
Je reçois environ 17 de ces une semaine. C'est de me pointer à la suite de mon code:
context.getResources().getDrawable(R.drawable.foo);
Cette ressource est certainement présent dans mon /drawable dossier. J'ai plusieurs centaines de milliers de installe, je ne suis pas sûr de savoir comment cela pourrait être en défaut pour certains utilisateurs, mais le fait de travailler pour la grande majorité. J'aimerais savoir ce qu'il se passe, parce qu'ils ne peuvent pas utiliser l'application dans cet état. Des idées?
Grâce
--------- Mise à jour ----------------------
Aussi je peux voir l'entrée pour le drawable en question de mon R.java fichier ressemble à ceci:
public static final int foo=0x7f020034;
- Je faire une nouvelle version du projet, puis tout de suite après que faire de mon communiqué de construire (pas de modification de code entre les deux pour donner l'automatique eclipse construire des trucs éventuellement laisser la R fichier déraper)
Grâce
- Cela peut être évident, mais vous avez la "génération automatique de" check in Eclipse sélectionné? Si vous n'avez pas utiliser Eclipse, avez-vous régénérer la ressource en classe après les modifier? Pouvez-vous nous montrer votre classe R?
- Salut oui j'ai "construire automatiquement" est cochée, mais je fais en sorte de faire une construction propre avant chaque sortie. Je peux voir l'entrée de ressource présents pour cette drawable dans R.java (collé ci-dessus) Merci
- Je ne vois rien de collé, mais si vous dites que l'entrée y est... Sont le paquet indiqué dans la R correct (même que votre Activité)?
- Hé, oui même package. Si le colis a été mal ou de l'entrée étaient manquantes dans le R de fichier, je pensais que tous les autres s'installe serait également s'écraser. Il arrive que quelques utilisateurs, ne peut pas comprendre pourquoi, tellement frustrant!
- Je reçois environ 80 une semaine maintenant. Je ne vois pas pourquoi! Ceci est causé par des charges de tous et de toutes de mes activités, et pas seulement une ressource spécifique. Évidemment, nous passons par une régression complet de test avant de les libérer et de ne jamais voir ce problème. Où pourrait-il venir de la? Est-ce un bug d'android? Il est sur TOUS types de périphériques et systèmes d'exploitation supportés (2.2+).
- Il est aussi dans mon app. Que de mon expérience et de mon utilisateur se plaint, ce problème se produit sur QVGA appareils. j'ai couru mon application sur QVGA émulateur, même exception se produire dans onCreate() la méthode à où i a été mise en mise en page pour mon écran de démarrage.
- Certains appareils sont à l'aide de mises en page que vous n'avez pas à fournir, et l'un drawable/layouts sont "disparus" ... C'est un problème spécifique au périphérique, rien que vous pouvez faire à ce sujet jusqu'à ce que vous obtenez ce que l'appareil et le fer sur ce.
- Cela semble prometteuse, à l'exception de ce qui est rapporté sur certains appareils qui je DOIS. Maintenant, cela pourrait être causé, parce que je suis le chargement d'une mise en page comme le principal.... sauf que cette disposition n'est PAS inclus dans la norme de dossier au lieu de cela, il est inclus dans la mise en page-normal-port, la mise en page-grand-port et la mise en page-xlarge-port & terre (j'ai mis de l'orientation de sorte qu'il doit correspondre à l'une de ces) - serait-ce parce que les appareils sont incapables de comprendre leurs propres configurations et essaie de prendre de la ressource à partir de la mise en page de dossier?
- Je vais poster cette lengtty chose dans la réponse.
- Double Possible de Se android.contenu.res.Ressources$NotFoundException: exception, même lorsque la ressource est présente dans android
Vous devez vous connecter pour publier un commentaire.
J'ai eu cette exception:
quand j'ai été en utilisant setText avec une valeur int. J'ai eu à le convertir en Chaîne de caractères.
Avant:
Après:
Est le crash rapports à venir à partir de la version <=1.6, et vous avez certaines ressources uniquement dans des dossiers, c'est à dire
"drawable-mdpi"
au lieu de simplement"drawable"
? Si oui, alors lisez à propos de "problèmes Connus" au bas de cette page.Le même problème que j'ai trouvé sur ma demande de ce matin et a trouvé une solution très simple à ce. le problème est grande et compliquée, mais elle ne l'est pas.
Étapes que j'ai suivi sont
Selon moi, il ne doit pas donner à cette exception à nouveau.
Raison : Lorsque vous générez l'application R.java contient toutes les adresses mémoire et il arrive que ces adresses ne sont pas valides pour la prochaine course.
Deuxième Raison : Quand vous avez l'application qui prend en charge paysage et portrati mode à la fois et si vous n'avez pas écrit le fichier XML pour l'un d'eux puis c'est la possibilité que peut entraîner ce type d'accident. et il y a assez beaucoup de chances de dépassement de mémoire et des problèmes de fuite de Mémoire lorsque vous avez à supporter les deux modes. s'il vous plaît pensez à ce sujet.
Ont eu lieu à plusieurs reprises en particulier sur les téléphones à faible densité. J'ai aussi remarqué qu'il arrive le plus souvent avec le 9-patch images.
Ma solution a été d'inclure 9-patch images en autant de densité de dossiers de ressources que j'ai pu (mdpi, ldpi, hdpi, xdpi).
Heh, aucune idée, je suis vraiment en train de travailler sur un sujet similaire, mais il pourrait l'être. Il est intéressant de mentionner que, bien que l'appareil peut haut de gamme de ressources et de modèles, il est impossible de réduire la résolution d'eux. Donc si vous avez des valeurs minimales, les mettre dans le AndroidManifest.xml. Essayez d'ajouter la mise en page-ldpi et la mise en page-petits d'abord.
Une technique utile pour l'enregistrement de linéaire obtenu est chargé de fixer un
android:tag
pour chaque conteneur racine de votre mise en page fichier XML, et dansonCreate()
après la misesetContentView(R.id.layout)
il suffit d'imprimer la valeur de la balise. Il vous dira qui s'est chargé - vous encore pour boucher le trou par l'ajout de toutes les combinaisons possibles, si seulement pour des fins de débogage.aussi, renommez votre un drawable à
drawables-nodpi
dossier pour s'assurer qu'aucune un drawable sont manquants. cela désactive interne de mise à l'échelle, rend les Apk réduite et ne pas "choisir" de toute autre dossier drawable.une fois que vous comprendre si c'est la mise en page ou dessinés, des mesures supplémentaires seront vous aider à trouver la cause. pour l'instant, vérifier les dispositions d'abord avec "toujours" un drawable.
le lundi, quand je serai de retour au bureau, je vais vous poster les métriques de code utilisé pour mesurer les données saisies dans ce fil - La partie d'Android est en charge de la sélection d'une ressource correcte profil?
Vous avez inclus des codes de référence contenu du kit SDK d'Android.
Par exemple, j'ai fait face à un problème similaire une fois et quand j'ai enlevé la ligne
de mon xml, tout fonctionne bien à nouveau.
Cela pourrait également se produire si la ressource en question (appelons cela ResA) est, à son tour, se référant à une ressource qui est manquant (appelons cela ResB).
Android va augmenter la ResourceNotFoundException pour les ResA même si ce qui est vraiment manquant est ResB. Telle est la vie!
Dans mon cas, ResB a été défini dans les valeurs-swxxxdp mais pas dans les valeurs. Donc j'ai été faire cette exception sur les téléphones, mais pas sur les tablettes.
Dans mon cas, j'ai eu un fichier de mise en page que conduire à l'accident:
J'ai reçu le journal suivantes
Qui a montré ce lien pour mon code:
Qui est cette ligne de code:
J'ai vérifié mon fichier navigator noms de dossier comme le suggère la réponse la plus populaire et il semble que la ressource qui est soi-disant manque, c'est dans la normale
layout
dossiermais quand on regarde sous le
Project
navigateur de fichiers plutôt que de lesAndroid
navigateur de fichiers, j'ai pu constater que non seulement le soi-disant manque de ressources fichier pas dans la normalelayout
dossier, mais je n'ai même pas delayout
dossier sans une extension spéciale.L'ajout d'un Android Annuaire de Ressources pour l'
res
dossier et en l'appelantlayout
et puis le coller sur les ressources de votre spécialité dossier (ex.layout-sw720dp
), et fixe le problème pour moi.Cette solution sera également travailler pour les autres dossiers, comme le suggère par exemple ne pas avoir des fichiers dans
drawable
et seulement de les avoir dansdrawable-xxhdpi
peuvent être résolus en déplaçant le fichier dansdrawable
et les ajustements nécessaires. Bonne chance dossier démons!L'erreur peut se produire lorsque portrait XML fichier de mise en page n'est pas définie. Ça n'arrive pas tout le temps, mais il arrive par exemple si l'utilisateur se transforme rapidement au large et sur le téléphone, je suppose que dans ce cas, le système appelle le onCreate en orientation portrait, avant d'appeler onCreate dans le paysage.