在Kotlin中访问lambda中的局部变量

问题描述 投票:0回答:1

我想保存从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>())
    }
android kotlin android-volley
1个回答
1
投票

这里是调用此方法时的代码

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>())
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.