kotlin - 如何使用 Kotlin 实现 volleyresponse 监听器
问题描述
我正在尝试将我的凌空请求移动到一个类中,这样我就可以将它用于多个网络调用。我需要一种方法来访问我在此类中使用的任何活动中的响应侦听器。我在java中看到了一些例子,但我发现很难做到这一点。
import android.content.Context
import com.android.volley.DefaultRetryPolicy
import com.android.volley.Request
import com.android.volley.RequestQueue
import com.android.volley.Response
import com.android.volley.toolbox.StringRequest
import com.android.volley.toolbox.Volley
interface VolleyResponse{
}
class NetworkCall(LINK:String,
CONTEXT:Context,
CACHE:Boolean,
PARAMS: HashMap<String, String> = HashMap(),
SuccessListener: Response.Listener<String>,
ErrorListener: Response.ErrorListener ) {
private var link:String = LINK
private var context: Context = CONTEXT
var cache: Boolean = CACHE
var PARAMS: HashMap<String,String> = HashMap()
fun RunTask( ){
//BUILD the request and listen for error or success
var request = object : StringRequest(
Request.Method.POST,link,
Response.Listener { response -> { }
},
Response.ErrorListener { error -> { }
}) {
override fun getParams(): HashMap<String, String> {
return PARAMS
}
}
var RequestQueue: RequestQueue = Volley.newRequestQueue(context)
request.setShouldCache(cache)
request.setRetryPolicy(DefaultRetryPolicy(10000, 0, 0F))
}
}
我这样称呼它...
fun processLogin() {
var params:HashMap<String,String> = HashMap()
params.put("user_email","username")
params.put("user_password","password")
var networkCall = NetworkCall("",applicationContext,false,params)
}
我只需要能够访问我的 processLogin 函数中的响应侦听器。
解决方案
首先,您必须在定义的地方定义实现Response.Listener<String>
,这可以按以下方式完成Response.ErrorListener
class
processLogin
private val successListener = Response.Listener<String> {
// Do something when response is received
}
private val errorListener = Response.ErrorListener {
// Do something when error is received
}
processLogin
现在,当您按以下方式调用时,将这些作为参数传递
var networkCall = NetworkCall("",applicationContext,false,params, successListener, errorListener)
最后,您需要更新您的NetworkCall
类,以便在网络操作中调用这些侦听器
fun RunTask( ){
//BUILD the request and listen for error or success
var request = object : StringRequest(
Request.Method.POST,link,
SuccessListener, // Pass listeners to request
ErrorListener) {
override fun getParams(): HashMap<String, String> {
return PARAMS
}
}
推荐阅读
- amazon-web-services - AWS S3如何获取期间的前缀成本
- git - 在查看 Git 更改时,如何让终端在 CentOS 7 上显示颜色。?这不是 Git Bash 这只是一个终端窗口
- angular - 在ionic 4中导航到root而不返回
- javascript - Chartsjs多轴,在数据集激活/停用时使刻度出现/消失
- python - 用于单词对共现计数的高效 Python?
- css - 如何更改文字颜色?
- c++ - 强制 gcc 不内联函数
- angular - 在角度 7 中获取路由参数为空
- android - 如何从内部存储而不是资产文件夹传递 JSON 动画文件?
- javascript - 将表单数据作为 json 发送到 angularjs 应用程序