点击主Activity按钮跳转TotalPaymentActivity时App自动关闭如何解决
问题根因
你代码中声明的AppDatabase类成员变量appDatabase仅做了声明,未进行初始化赋值,在AsyncTask的doInBackground方法中直接调用appDatabase.CustomerAccountDao()会触发空指针异常,直接导致Activity闪退。
解决方案
- 先在使用
appDatabase前完成初始化操作,你可以在initializeAll()方法中补充初始化代码(以Room单例初始化写法为例,替换为你自己项目中AppDatabase对应的初始化逻辑即可):
private void initializeAll() { tvPaidTotal = (TextView) findViewById(R.id.tvPaidTotal); // 补充数据库初始化 appDatabase = AppDatabase.getInstance(getApplicationContext()); new getTotalPayment().execute(); }
- 补充异常捕获逻辑,你当前仅捕获了
IndexOutOfBoundsException,空指针、数据库操作异常等都未捕获,建议扩大异常捕获范围,同时可以添加日志方便排查问题:
@Override protected Void doInBackground(Void... voids) { sum = 0; try { arr = appDatabase.CustomerAccountDao().loadAllCustomerAccounts(); for (int i=0;i<arr.size();i++) { sum+=arr.get(i).getCreditAmount(); } } catch (Exception e) { // 开发阶段可以打印日志排查问题 e.printStackTrace(); sum = 0; } return null; }
- 如果修改后仍有闪退,可打开Android Studio的Logcat面板,筛选崩溃栈日志,即可定位具体报错点。
内容的提问来源于stack exchange,提问作者M Basir Hayat
相关产品推荐
相关产品推荐

