我如何在这里使用lambda表达式?

Shuhratjon Jumaev

我有自定义的GetVolley类

class GetVolley(private val mContext: Context, private val url: String, private val onVolleySuccess: OnVolleySuccess?, private val mOnVolleyError: OnVolleyError?, private val mOnVolleyEnd: OnVolleyEnd?) {
    private fun getDataVolley() {
        Log.d("GetVolleyUrl", url)
        val request = JsonObjectRequest(Request.Method.GET, url, null, Response.Listener { response: JSONObject ->
            Log.d("GetVolleyResult", response.toString())
            if (response.has("result") && response.getBoolean("result")) {
                onVolleySuccess?.onSuccess(response)
            } else if (response.has("message")) {
                if (mOnVolleyError != null) mOnVolleyError.onError(response.getString("message"))
                else Toast.makeText(mContext, response.getString("message"), Toast.LENGTH_LONG).show()
            }
            mOnVolleyEnd?.onEnd()
        }, Response.ErrorListener { volleyError: VolleyError ->
            Log.d("GetVolleyError", volleyError.message.toString())
            val errorMessage: String = if (volleyError is NetworkError || volleyError is AuthFailureError) {
                "No Internet…"
            } else {
                "Undefinded error"
            }
            if (mOnVolleyError != null) mOnVolleyError.onError(errorMessage)
            else Toast.makeText(mContext, errorMessage, Toast.LENGTH_LONG).show()
            mOnVolleyEnd?.onEnd()
        })
        Volley.newRequestQueue(mContext).add(request)
    }

    init {
        getDataVolley()
    }
}

不同文件中的接口:

interface OnVolleySuccess {
    fun onSuccess(response: JSONObject)
}
______________________________________
interface OnVolleyError {
    fun onError(error: String)
}
______________________________________
interface OnVolleyEnd {
    fun onEnd()
}

当我使用自定义GetVolley请求时。我的代码如下:

GetVolley(this, url, object : OnVolleySuccess {
    override fun onSuccess(response: JSONObject) {
        parseResponse(response)
    }
}, object : OnVolleyError {
    override fun onError(error: String) {
        showError(error)
    }
}, null)

我希望它看起来像这样:

GetVolley(this, url, response -> {
    parseResponse(response)
}, error -> {
    showError(error)
}, null)

我所有的回调都可以为空,因此我可以将null设置为onVolleySuccess,onVolleyError,onVolleyEnd。

尼古拉斯

您所说的SAM转换(单一抽象方法)。它仅适用于Java接口,但自Kotlin 1.4起可用于Kotlin接口。(请参阅本文)。现在,如果您想要lambda,请使用lambda:

class GetVolley(
    private val mContext: Context, 
    private val url: String, 
    private val onVolleySuccess: ((response: JSONObject) -> Unit)?, 
    private val mOnVolleyError: ((error: String) -> Unit)?, 
    private val mOnVolleyEnd: (() -> Unit)?
) {

而不是做:

onVolleySuccess?.onSuccess(response)

你做:

onVolleySuccess?.invoke(response)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我如何在这里正确使用forloop?

来自分类Dev

我如何在这里使用通用方法?

来自分类Dev

我如何在这里使用 for 循环?

来自分类Dev

正则表达式 - 在这里还是那里?

来自分类Dev

在这里我可以学习WSO2 ESB表达式

来自分类Dev

在这里我可以学习WSO2 ESB表达式

来自分类Dev

如何在这里使用案例

来自分类Dev

如何在这里使用join

来自分类Dev

Python正则表达式返回一组而不是两组。我在这里想念什么?

来自分类Dev

我如何在这里访问数组和?

来自分类Dev

我如何在这里找到想要的东西?

来自分类Dev

我如何在这里更改 $number 的值

来自分类Dev

我如何在这里修复 MalformedURLException?

来自分类Dev

我如何在这里使用 ES6 代码而不是 for 循环?

来自分类Dev

我如何避免在这里使用goto语句?

来自分类Dev

如何知道我在这里使用哪个docker映像?

来自分类Dev

如何在这里正确使用绑定?

来自分类Dev

如何在这里使用分组查询

来自分类Dev

如何在这里正确使用启动命令?

来自分类Dev

如何在这里使用退出doc

来自分类Dev

如何在这里使用子选择器?

来自分类Dev

我如何让MarkerClusterer在这里工作?

来自分类Dev

如何在这里申请sed?

来自分类Dev

如何在这里引用数组

来自分类Dev

在这里如何正确使用绑定?

来自分类Dev

如何在这里借用自我的多个部分?自我在这里不是一成不变的吗?

来自分类Dev

我如何在这里正确格式化或访问JSON?

来自分类Dev

如何在Lisp(scheme)中编写幂函数?我的程序在这里怎么了?

来自分类Dev

Spring Boot 如何在这里配置我的 Jackson ObjectMapper?