Android运行报错lateinit property layoutManager未初始化求解决方案
错误原因
- 报错核心是你声明的
lateinit变量layoutManager在被调用时还未完成初始化赋值。 - 你代码中原先初始化
layoutManager的代码段被注释,但是在Volley网络请求的成功回调中直接调用了该变量给RecyclerView设置布局、创建分割线,就触发了未初始化异常。 - 额外问题:你把RecyclerView的布局绑定、分割线添加、适配器绑定逻辑写在了遍历书籍数据的for循环内部,每添加一条数据就重复执行一次配置,会造成不必要的性能损耗。
修复方案
- 在
recyclerdashboard=view.findViewById(R.id.recyclerdashboard)代码行下方添加layoutManager初始化代码:
layoutManager = LinearLayoutManager(activity)
- 调整Volley请求成功回调内的逻辑,把RecyclerView配置代码移到for循环外部,修改后参考代码如下:
val jsonObjectRequest = object : JsonObjectRequest(Request.Method.GET, url, null, Response.Listener { // 处理响应逻辑 val success = it.getBoolean("success") if (success) { val data = it.getJSONArray("data") for (i in 0 until data.length()) { val bookJsonObject = data.getJSONObject(i) val bookObject = Book( bookJsonObject.getString("book_id"), bookJsonObject.getString("name"), bookJsonObject.getString("author"), bookJsonObject.getString("rating"), bookJsonObject.getString("price"), bookJsonObject.getString("image") ) bookinfolist.add(bookObject) } // 列表配置仅执行一次即可 recyclerdashboard.layoutManager=layoutManager recyclerdashboard.addItemDecoration( DividerItemDecoration( recyclerdashboard.context, (layoutManager as LinearLayoutManager).orientation ) ) recycleradapter= DashboardRecyclerAdapter(activity as Context,bookinfolist) recyclerdashboard.adapter=recycleradapter } else { Toast.makeText(activity as Context, "出现未知错误", Toast.LENGTH_SHORT).show() } }, Response.ErrorListener { // 处理错误逻辑 print("error $it") }) { override fun getHeaders(): MutableMap<String, String> { val headers = HashMap<String, String>() headers["Content-type"] = "application/json" headers["token"] = "9bf534118365f1" return headers } }
- 重新运行项目即可解决崩溃问题。
内容的提问来源于stack exchange,提问作者Nagaraju Venkata
相关产品推荐
相关产品推荐

