【问题标题】:Accessing local variable in lambda in Kotlin在 Kotlin 中访问 lambda 中的局部变量
【发布时间】:2020-01-28 05:00:17
【问题描述】:

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

我应该如何更改 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>())
    }

【问题讨论】:

  • 也许this 对你有用?

标签: android kotlin android-volley


【解决方案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>())
        }
    }

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-06-29
  • 2017-10-17
  • 2012-02-26
  • 2011-08-04
  • 2019-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多