如何正确从Android资源中获取整数?
问题分析与解决方案:获取Integer资源实际值而非资源ID
你遇到的这个问题是Android开发里很常见的误区——你现在存入vector的是资源ID(也就是R.integer.c_1对应的整数值),而不是你在资源文件里定义的实际整数1。R.integer.c_1本质上是Android编译时为这个资源分配的唯一索引ID(就是你Log里看到的2131230722),它只是指向资源的“地址”,不是资源本身的值。
正确的解决方式有两种:
1. 存入vector时直接存储实际值
在添加到vector之前,先通过Context的资源工具类获取资源的实际值:
// 获取资源文件中定义的实际整数值 int actualC1Value = getResources().getInteger(R.integer.c_1); // 将实际值存入vector puntuation.add(actualC1Value);
这样之后你从vector中取出值时,直接就是1,Log输出和if判断都会符合预期。
2. 若已存入资源ID,使用时转换为实际值
如果你已经把资源ID存在vector里了,也可以在需要使用的时候,通过ID反向获取实际值:
// 从vector取出资源ID int resourceId = puntuation.get(5); // 通过ID获取实际的整数值 int actualValue = getResources().getInteger(resourceId); // 此时Log会输出你定义的1 Log.d("Valor de int correcto", String.valueOf(actualValue));
额外提醒
- 调用
getResources()需要有效的Context:在Activity或Fragment里可以直接调用;如果是在自定义工具类里,需要传入Context对象(比如ApplicationContext)。 - 所有Android资源(字符串、整数、Drawable等)的
R.xxx.xxx都是资源ID,不是资源的实际内容,必须通过资源API才能获取到真实值。
内容的提问来源于stack exchange,提问作者Manu




