Resources.NotFoundException仅在某些设备上

时间:2017-06-20 03:29:02

标签: android android-resources

我正在获取这样的颜色,并且对于我在崩溃报告中看到的一些设备返回0。他们全都在res/values/colors.xml。防爆。 <color name="firstcolor">#A8A77A</color>colorString是动态的。

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) - Samsung Core Prime(4.4.4)

崩溃报告来自以下各项: 三星Ace 4(4.4.2) - 索尼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)

有什么方法可以找出它为什么不适用于某些设备?

3 个答案:

答案 0 :(得分:1)

尝试清理项目并查看

也可以使用

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

答案 1 :(得分:0)

您可以这样使用,您应该在getIdentifier中将defType定义为颜色

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

int primaryColor = ContextCompat.getColor(resourceId);

答案 2 :(得分:0)

原来问题是toLowerCase()。对于某些区域设置,大写I正在转换为ı而不是i,这导致无法按标识符找到资源。