Android整数资源运行时值异常:为何8080变为2131296322?
问题解答:Android整数资源取值异常原因及正确用法
核心原因
你看到的2131296322是资源ID,不是你在integers.xml里定义的实际端口值。Android的R.integer.server_port本质是系统为这个整数资源分配的唯一索引编号,而非资源存储的实际数值。
你的资源定义是合规的
你创建integers.xml并定义整数资源的方式完全符合Android开发规范:
<!-- app/src/main/res/values/integers.xml --> <resources> <integer name="server_port">8080</integer> </resources>
正确的取值实现
要获取资源中存储的实际整数,必须通过Resources对象解析资源ID:
- 在
MyApplication(本身是Context子类)中,直接调用:
int actualServerPort = getResources().getInteger(R.integer.server_port); MyServer server = new MyServer(actualServerPort);
- 如果在非Context类中操作,需要先获取有效的Context实例,再通过它调用
getResources()方法。
额外说明
Android资源系统的设计逻辑是:所有资源(字符串、整数、Drawable等)都会被分配一个全局唯一的整数ID,这些ID自动生成在R类中,用于快速定位对应的资源内容。直接使用R.integer.*拿到的就是这个索引ID,而非资源本身的实际值,这是正常的系统行为,并非你的实现错误。
内容的提问来源于stack exchange,提问作者Daniel Walker
相关产品推荐
相关产品推荐

