在 Kotlin 的 lambda 中访问局部变量

Accessing local variable in lambda in Kotlin

我想保存从 Volley 获取的数据,但是 VolleyRequest 函数(从服务器获取 json 数据)中使用的 lambda 阻止了它。

我应该如何更改 lambda 外部的局部变量? 提前致谢。

class ConDataforReturn( val title:String , val imgDataList: ArrayList<ConImgData>)

fun getConData(context: Context, idx : String):ConDataforReturn{
        val params = HashMap<String,String>()
        var cd = arrayListOf<ConImgData>()
        var title =""
        params.put("package_idx",idx)
        Log.e("idx size",idx.length.toString())
        VolleyRequest(context,params,"https://dccon.dcinside.com/index/package_detail") { response ->
            val answer = JSONObject(response)
            var json = answer.getJSONArray("detail")

            title = answer.getJSONObject("info").getString("title")
            Log.d("title",title)//Prints right data
            for (i in 0..(json.length() - 1)) {
                val v = json.getJSONObject(i)
                cd.add(ConImgData(v.getString("title"), v.getString("ext"), v.getString("path")))
            }

        }
        return ConDataforReturn(title,cd)//returns ConDataforReturn("",arrayListOf<ConImgData>())
    }

这是您调用此方法的代码

getConData(this, "id") { condata ->

}

现在,你的方法看起来像这样,

fun getConData(context: Context, idx : String, returnConData : (condata : ConDataforReturn) -> Unit){
        val params = HashMap<String,String>()
        var cd = arrayListOf<ConImgData>()
        var title =""
        params.put("package_idx",idx)
        Log.e("idx size",idx.length.toString())
        VolleyRequest(context,params,"https://dccon.dcinside.com/index/package_detail") { response ->
            val answer = JSONObject(response)
            var json = answer.getJSONArray("detail")

            title = answer.getJSONObject("info").getString("title")
            Log.d("title",title)//Prints right data
            for (i in 0..(json.length() - 1)) {
                val v = json.getJSONObject(i)
                cd.add(ConImgData(v.getString("title"), v.getString("ext"), v.getString("path")))
            }
            returnConData(ConDataforReturn(title,cd)) //returns ConDataforReturn("",arrayListOf<ConImgData>())
        }
    }