2011-12-04 2 views
0

Donc je ne suis pas un débutant en programmation, Java ou Android en développement, mais j'ai eu un problème étrange: j'ai fait une application, assez avancée, et l'ai sur le marché.Android Resource pas trouvé l'exception

Pour l'instant j'ai plus de 1000 installations et j'ai environ 4 ou 5 rapports d'erreur pour une exception ResourceNotFoundException. La chose la plus étrange est que la ligne, il se bloque sur est

setContentView(R.layout.some_custom_layout) 

Dans le code, je suis toujours référence à ressources par

someTxtView.setText(R.string.some_string) 

Je me demande si je

mContext.getResources().getDrawable(mContext.getResources().getIdentifier("some_string", "string", "my.example.package")); 

serait l'accident s'en va?

Répondre

2

Je faisais face au même problème et je l'ai corrigé en créant un dossier de mise en page appelé "layout-small".

Basé sur les résolutions J'ai créé seulement 2 dossiers "layout-large" et "layout-medium". Mais peu de téléphones ont une résolution inférieure, il ne trouve pas les ressources appropriées selon la résolution. Android OS rend les ressources XML selon la résolution. Il va et trouve les ressources dans les dossiers requis.

95+% Téléphones Android ayant une résolution correspondant au dossier "layout-normal". Mais il y a encore des téléphones ayant une résolution plus faible. D'où ce problème s'est produit.

Pour plus de détails: http://developer.android.com/guide/practices/screens_support.html

Hope this helps votre problème.

+0

Je sais que c'est vieux mais a passé au moins 3 jours sur ce problème. Merci beaucoup, vous m'avez aidé. Je n'aurais jamais pensé que c'était si simple de réparer – user3004826

0

Si vous appelez setContentView(R.layout.some_custom_layout) à partir de la méthode onCreate de l'activité, vous devriez être bon tant que votre application compile (et je suppose que c'est le cas).

AFAIK accéder à vos ressources de chaîne via:

someTxtView.setText(R.string.some_string) 

n'est pas le chemin à parcourir. Vous devriez faire ceci:

getContext().getResources().getString(R.string.some_string) 
+0

Il compile et le plus étrange est que dans la majorité des cas (99%) il ne plante pas et il se débrouille bien. Cependant, il y a un pour cent des utilisateurs qui ne peuvent pas démarrer l'application à cause de ce bogue. Je me demande ce qui pourrait être fait. – Norbert

+0

mais avez-vous essayé d'accéder à vos ressources de chaîne comme je l'ai mentionné? Je pense que la façon dont vous accédez à vos chaînes pourrait être fausse. –

+0

L'exemple d'accès à la chaîne n'était qu'un exemple, je n'ai vu aucun rapport indiquant qu'il se bloque réellement là-bas. Je voulais dire que chaque fois que j'utilise un ID de ressource, je l'utilise à travers "R" – Norbert

0

Sauf

setContentView(R.layout.some_custom_layout); 

essayer d'utiliser

setContentView(yourpackagename.R.layout.some_custom_layout); 

qui m'a aidé beaucoup de fois.

+0

Jamais pensé à cela, je vais l'essayer et voir si aide. Merci. – Norbert

+0

NP Norbert ...: DA beaucoup de fois qui m'a aidé ... – Markonato

+2

La seule fois que cela aiderait, c'est si vous avez importé android.R au lieu de yourPackageName.R – Sojurn

0

J'ai une suggestion. utilisez-vous dans vos mises en page des ressources android secific, comme dessinables ou quelque chose, par exemple

android: ANTÉCÉDENTS = "@ android: drawable/some_android_drawable"

Peut-être que certains fournisseurs ne fournissent pas certains ressources avec leur firmware, de sorte que votre application se bloque. par exemple this issue

0
someTxtView.setText(R.string.some_string) 

Vous définissez ici la valeur entière du texte. Ce n'est pas correctement car il cherche une resousre sur cette valeur. Vous devez écrire

someTextView.setText(getResources().getText(R.string.blabla));