安卓App多次启动失败闪退,附logcat及相关代码求排查
问题排查及解决方案
核心闪退原因
你在MainActivity中声明了全局延迟初始化变量madapter,但onCreate方法里仅创建了一个局部变量adapter,没有给全局的madapter完成赋值。后续给RecyclerView设置适配器、以及接口请求成功后调用madapter.updateNews时,都会触发未初始化属性访问异常,直接导致应用闪退。
其他潜在问题
- 你在适配器还没有完成初始化的时候就先调用了
fetchData(),如果网络请求返回速度快于适配器初始化流程,也会触发空引用异常 - 请求URL里的
API_KEY是占位符,没有替换成你在NewsAPI平台申请的有效密钥,会导致接口请求失败 - 未在
AndroidManifest.xml中添加网络权限,会导致网络请求被系统拦截
修复步骤
1. 修复适配器初始化逻辑
修改onCreate内的代码,把实例化的适配器赋值给全局的madapter,同时调整执行顺序,先完成适配器初始化再调用数据请求方法:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) recyclerView.layoutManager=LinearLayoutManager(this) // 给全局madapter赋值,不要创建无意义的局部变量 madapter = NewsListAdapter(this) recyclerView.adapter = madapter // 等适配器初始化完成后再请求数据 fetchData() }
2. 替换有效API密钥
把fetchData方法中URL里的API_KEY替换成你自己在NewsAPI官网申请的有效密钥。
3. 添加网络权限
在AndroidManifest.xml的manifest标签下(注意不要放在application标签内部)添加网络权限声明:
<uses-permission android:name="android.permission.INTERNET" />
补充说明
logcat里出现的com.mediatek.cta.CtaUtils相关报错是联发科设备的系统类缺失提示,和应用本身的业务逻辑无关,不会影响应用正常运行,无需处理。
内容的提问来源于stack exchange,提问作者Alok Singh
相关产品推荐
相关产品推荐

