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

TextView不显示文本,Android应用崩溃及显示0的技术求助

解决Android应用崩溃与显示异常问题

嘿,作为同样啃过Big Nerd Ranch那本Android书的过来人,我太懂你这种卡壳的感觉了!咱们一步步来拆解问题:

为什么原来的代码会崩溃?

你写的String text = Integer.toString(question);之所以崩溃,核心原因是类型不匹配。Integer.toString()方法需要传入一个int类型的参数,但你这里的question应该是自定义Question类的实例对象,不是整数。直接把对象塞给需要整数的方法,运行时肯定会抛出类型转换相关的异常(比如ClassCastException)。

为什么修改后显示0?

你改成String text = Integer.toString(Integer.toString(question));后不崩溃,但显示0,是因为:

  1. 首先执行Integer.toString(question)时,其实是调用了Question对象的toString()方法——如果你的Question类没重写toString(),默认会返回对象的哈希码,但你显示0,大概率是你重写的toString()方法返回了"0",或者你误把某个默认值为0的字段当成了问题文本返回。
  2. 接着这个"0"字符串被处理后,最终就以字符串形式显示出来,所以你看到的是0。

正确的解决方案

回到Big Nerd Ranch的教材里,Question类的设计逻辑是存储问题文本的资源ID(一个int值,对应strings.xml里的字符串),而不是直接存储字符串。所以你需要通过资源ID去获取实际的问题文本:

  1. 先确认你的Question类有获取资源ID的方法,比如:
public class Question {
    private int mTextResId; // 存储问题文本的资源ID
    private boolean mAnswerTrue;

    public Question(int textResId, boolean answerTrue) {
        mTextResId = textResId;
        mAnswerTrue = answerTrue;
    }

    // 获取资源ID的方法
    public int getTextResId() {
        return mTextResId;
    }
}
  1. 然后替换掉错误的代码行,用getResources().getString()来获取实际的问题文本:
String text = getResources().getString(question.getTextResId());

这样就能正确显示strings.xml里对应的问题文本,既不会崩溃,也不会显示莫名其妙的0啦!

内容的提问来源于stack exchange,提问作者Safwan Shaikh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:20:54