2017-06-20 5 views
0

Je récupère une couleur comme celle-ci et renvoie 0 pour quelques périphériques que je vois sur les rapports d'erreur. Ils sont tous en res/values/colors.xml. Ex. <color name="firstcolor">#A8A77A</color>. Le colorString est dynamique.Resources.NotFoundException uniquement sur certains périphériques

int primaryColor = ContextCompat.getColor(context, 
      context.getResources().getIdentifier(colorString.toLowerCase(), 
        context.getString(R.string.color), context.getPackageName())); 

Je l'ai testé sur ces appareils et il fonctionne: LG G5 (7.0) - Nokia N1 (5.1.1) - Motorola G (5.1) - Samsung de base Prime (4.4.4)

Les rapports d'erreur sont de ceux-ci: Samsung Ace 4 (4.4.2) - Sony Xperia M5 E5603 (6.0) - NG Envy (4.4.2)

Fatal Exception: android.content.res.Resources$NotFoundException: Resource ID #0x0 
    at android.content.res.Resources.getValue(Resources.java:1133) 
    at android.content.res.Resources.getColor(Resources.java:815) 
    at android.support.v4.content.ContextCompat.getColor(ContextCompat.java:434) 

Toute façon de savoir pourquoi ça fait Sn't travailler pour certains de ces appareils?

Répondre

0

Il s'avère que le problème était toLowerCase(). Un capital I a été transformé en ı au lieu de i pour certains paramètres régionaux, ce qui a abouti à ne pas être en mesure de trouver la ressource par identifiant.

1

Essayez de nettoyer le projet et voir

Il suffit d'utiliser également

ContextCompat.getColor(context,R.color.firstcolor) 
+0

Non, je dois les obtenir dynamiquement avec l'ID. Il y a de nombreuses couleurs. – ono

0

Vous pouvez utiliser comme ça, vous devriez DefType comme couleur dans getIdentifier.

int resourceId = getResources().getIdentifier(colorString.toLowerCase(), "color", context.getPackageName()); 

int primaryColor = ContextCompat.getColor(resourceId); 
+0

Mon 'R.string.color' est" couleur ". Donc c'est la même chose que la tienne. – ono