You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:58:08