使用Volley从MySQL取数据后RecyclerView不显示问题求助
问题解决:RecyclerView未显示已获取的数据
核心原因
Volley网络请求是异步操作,你在回调中往ordersList添加数据时,Adapter已完成初始化,但未通知Adapter数据发生变化,导致RecyclerView无法更新视图。
修改方案
在loadData方法的Volley回调中,数据全部添加到列表后,调用Adapter的notifyDataSetChanged()方法,触发RecyclerView刷新:
修改MainActivity.kt中的loadData函数:
private fun loadData() { val queue = Volley.newRequestQueue(this) val stringRequest = StringRequest(Request.Method.POST, URL, { response -> try { Log.e("anytext", response) val jsonArray = JSONArray(response) // 清空旧数据,避免重复加载 ordersList.clear() for (i: Int in 0 until jsonArray.length()) { val jsonObject = jsonArray.getJSONObject(i) val order = Order( jsonObject.getInt("ID"), jsonObject.getString("orderDate"), jsonObject.getString("status"), jsonObject.getString("name") ) ordersList.add(order) Log.e("order data", order.toString()) Log.e("array size", ordersList.size.toString()) } // 关键:通知Adapter数据已更新 rcvAdapter.notifyDataSetChanged() // 空数据提示优化 if (ordersList.isEmpty()) { Toast.makeText(this, "没有订单数据", Toast.LENGTH_SHORT).show() } } catch (e: JSONException) { e.printStackTrace() } }, { error -> Toast.makeText( this, error.message, Toast.LENGTH_LONG ).show() }) queue.add(stringRequest) Log.e("final", "success") }
额外优化点
- 清空旧数据:每次加载前调用
ordersList.clear(),避免重复添加数据导致列表重复显示。 - 主线程安全:Volley回调默认在主线程执行,若后续有其他线程操作列表,可使用
runOnUiThread包裹更新操作:runOnUiThread { rcvAdapter.notifyDataSetChanged() }
内容的提问来源于stack exchange,提问作者Abd elrahman Hussein
相关产品推荐
相关产品推荐

