You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin Android开发用Volley时出现Unresolved reference: it错误如何解决

问题原因

  • 你在JsonObjectRequest的成功回调中显式声明了参数名为response,但代码里却用单参数lambda的默认隐式名it调用方法,Kotlin无法识别未定义的it变量,因此抛出Unresolved reference: it错误。
  • 额外问题:当前fetchData()方法没有返回值,你在onCreate中将它的返回值赋值给items会报错,同时Volley请求是异步逻辑,也不能直接同步返回请求结果。

解决方法

1. 修复变量引用错误

把报错行的it改成你声明的参数名response即可:

{ response ->
   // 把it替换为显式声明的response
   val newsJsonArray = response.getJSONArray("articles")
}

如果你想使用默认的it,删掉显式的参数声明即可:

{ // 不写参数名时,单参数lambda默认变量名为it
   val newsJsonArray = it.getJSONArray("articles")
}

2. 修复异步请求数据更新逻辑

Volley是异步请求,不能直接让fetchData()返回数据,需要在请求成功拿到解析后的新闻数据后,再通知适配器更新列表:
首先把列表和适配器改成类成员变量:

class MainActivity : AppCompatActivity(), NewsItemClicked {
    // 声明全局的新闻列表和适配器
    private val newsItems = arrayListOf<String>()
    private lateinit var adapter: NewsListAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        recyclerView.layoutManager=LinearLayoutManager(this)
        // 初始化适配器
        adapter= NewsListAdapter(newsItems,this)
        recyclerView.adapter=adapter
        // 发起网络请求
        fetchData()
    }

然后在请求成功的回调里解析数据、更新列表:

{ response ->
   val newsJsonArray = response.getJSONArray("articles")
   newsItems.clear()
   // 遍历解析新闻标题存入列表
   for(i in 0 until newsJsonArray.length()){
       val newsObject = newsJsonArray.getJSONObject(i)
       val title = newsObject.getString("title")
       newsItems.add(title)
   }
   // 通知适配器数据变更,刷新列表
   adapter.notifyDataSetChanged()
}

注意:请求url里的API_KEY需要替换成你在NewsAPI官网申请的有效密钥,否则请求会返回失败。

内容的提问来源于stack exchange,提问作者Alok Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:45:02