2017-06-20 9 views
0

私はこのような色を取得しており、クラッシュレポートに表示されているいくつかのデバイスでは0を返しています。それらはすべてres/values/colors.xmlです。 Ex。 <color name="firstcolor">#A8A77A</color>colorStringは動的です。Resources.NotFoundExceptionは一部のデバイスでのみ発生します

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

私はこれらのデバイス上でテストしてみたし、それが動作します: LG G5(7.0) - ノキアN1(5.1.1) - モトローラG(5.1) - サムスンコアプライム(4.4.4)

クラッシュレポートは、これらの中から、次のとおりです。 サムスンエース4(4.4.2) - ソニーのXperia M5 E5603(6.0) - NGの羨望(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) 

理由を見つけるために、任意の方法それはdoeこれらのデバイスのいくつかで動作しませんか?

答えて

0

この問題は、toLowerCase()でした。 Iは、一部のロケールではiの代わりにıに変換されました。その結果、識別子でリソースを見つけることができませんでした。

1

プロジェクトをきれいにし、

はまた、単に

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

いいえ、私はidで動的に取得する必要があります。多くの色があります。 – ono

0

あなたはこのように使用することができます使用を参照してください、あなたはgetIdentifierでとしてDEFTYPE必要があります。

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

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

私の 'R.string.color'は「color」です。これはあなたのものと同じです。 – ono

関連する問題