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

使用getString(R.string.xxx)实例化自定义类对象导致Android应用崩溃的问题求助

解决getString(R.string.xxx)初始化对象导致应用闪退的问题

嘿,这问题我太熟了!你直接在Activity的成员变量位置调用getString(R.string.proberen)来实例化taken对象,这时候你的Activity还没走完初始化流程呢,肯定会崩!

问题根源

Activity的成员变量是在onCreate()方法执行之前就完成初始化的,这时候Activity的Context还没有被正确初始化。而getString()方法是依赖于Context的,这时候调用它会直接抛出NullPointerException——你说没看到错误提示,大概率是没打开LogCat查看崩溃日志,底层其实是空指针导致的闪退。

修复方案

最稳妥的办法是把对象初始化的逻辑移到onCreate()方法里,等Context准备就绪后再执行:

步骤1:先声明变量,不直接初始化

把原来的成员变量声明改成只定义不赋值:

public class Activity2 extends AppCompatActivity {
    private TextView mTextView;
    private Button mbutton;
    // 只声明变量,不初始化
    private taken f01, f02, f03, f04, f05;
    private taken[] TakenArray;

    // ... 其他方法
}

步骤2:在onCreate中完成初始化

等setContentView()执行完,Context已经可用了,再初始化你的对象数组:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_2);
    // 先初始化视图控件
    mTextView = (TextView) findViewById(R.id.taken);
    mbutton = (Button) findViewById(R.id.taken_button);
    
    // 现在可以安全调用getString了
    f01 = new taken(getString(R.string.proberen));
    f02 = new taken("tegd");
    f03 = new taken("test");
    f04 = new taken("xcz");
    f05 = new taken("dvg");
    TakenArray = new taken[]{ f01,f02,f03,f04,f05};
    
    // 继续执行后续逻辑
    showRandom();
    mbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            showRandom();
        }
    });
}

额外小提示

下次遇到应用闪退,一定要去Android Studio的LogCat里看错误日志,里面会清晰地告诉你崩溃的原因(比如这次的空指针),定位问题会快很多!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:24:09