2017-06-20 106 views
0

我正在获取像这样的颜色,并且它对于我在崩溃报告中看到的一些设备返回0。他们都在res/values/colors.xml。防爆。 <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) - 吴羡(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

您可以使用这样,你应该DEFTYPE中则getIdentifier 颜色

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

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

我的'R.string.color'是“color”。所以这和你的一样。 – ono

相关问题