使用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
相关产品推荐
相关产品推荐

