自定义ArrayAdapter适配整数类型失效问题求助
解决Integer类型导致ArrayAdapter崩溃的问题
我完全懂你遇到的困扰——把data类里的String变量改成Integer后,APP能安装但启动就崩,这其实是TextView的setText()方法重载在“搞小动作”!
问题根源
TextView有两个很容易搞混的setText()重载:
setText(String text):用来显示普通文本setText(int resId):用来加载字符串资源ID(比如R.string.app_name这种整数值)
当你把data类里的字段改成Integer后,调用textView.setText(currentitem.getRecovered())时,Java会自动把Integer拆箱成int,系统就会误以为你要引用某个资源ID。但你传入的数值(比如2、6、22222)根本不是有效的资源ID,直接就会抛出Resources$NotFoundException,导致APP启动崩溃。
两种解决方案
方案1:在setText时直接转成String
最简单的处理方式,就是把Integer转换成String再传给setText:
// 以recovered字段改为Integer为例 textView1.setText(String.valueOf(currentitem.getRecovered())); // 或者用拼接空字符串的快捷方式 textView1.setText(currentitem.getRecovered() + "");
方案2:在data类中封装字符串转换(更规范)
如果希望数据层处理好类型转换,可以在data类里新增返回String的方法,同时处理空值避免崩溃:
修改data.java:
public class data { // 把需要的字段改成Integer private Integer confirmed; private Integer dead; private String country; private Integer recovered; private String updated; // 原来的getter保留,返回Integer public Integer getRecovered() { return recovered; } // 新增方法,返回转换后的字符串,同时处理null public String getRecoveredAsString() { return recovered != null ? recovered.toString() : ""; } // 其他字段同理修改构造器和getter... public data(Integer Confirmed, Integer Dead, String Country, Integer Recovered, String Updated){ confirmed=Confirmed; dead=Dead; country=Country; recovered=Recovered; updated=Updated; } }
然后在adapter里调用这个新方法:
textView1.setText(currentitem.getRecoveredAsString());
额外提醒
如果你的Integer字段可能为null,一定要做非空判断,不然直接调用toString()会抛出NullPointerException,上面方案2里的三目运算符就处理了这种情况。
内容的提问来源于stack exchange,提问作者rahim virani
相关产品推荐
相关产品推荐

