How to callback a value from Volley On Response function in Kotlin
我正在集成一个登录系统,我希望
我在Google上进行了搜索,发现可以使用回调界面(This Question)完成此操作。但是我不知道如何在Kotlin
中做到这一点
[也已更新]这是我的Kotlin文件,其中包含许多活动使用的函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | package com.pratham.example // My required imports import ... fun function1(){ ... } fun function2(){ ... } // This Auth function will return True if login success fun auth(activity:Activity):Boolean{ val queue = Volley.newRequestQueue(activity) val req = JsonObjectRequest(Request.Method.POST, url, jsonObj, Response.Listener { response -> val JSONObj = response.getString("Status") if(JSONObj=="200"){ // return true } else{ // return false } }, Response.ErrorListener { // return false } ) queue.add(req) } fun function4(){ ... } |
此函数将根据Volley Response返回true或false。
我如何从Kotlin
中的
编辑::我试图使用像这样的界面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | package com.pratham.sitapuriya import ... fun function1(){ ... } fun function2(){ ... } interface MyInterface { fun onCallback(response: Boolean,context:Context) } class Login : MyInterface { private val myInterface = this override fun onCallback(response: Boolean,context:Context) { Toast.makeText(context,"Working",Toast.LENGTH_SHORT).show() } fun auth(activity: Activity): Boolean { val sp1 = activity.getSharedPreferences("Login", AppCompatActivity.MODE_PRIVATE) if (sp1.contains("token") && sp1.contains("deviceId")) { val token = sp1.getString("token", null) val deviceId = sp1.getString("deviceId", null) if (!token.isNullOrEmpty() && !deviceId.isNullOrEmpty()) { // val url ="http://10.0.2.2:80/Projects/Sitapuriya/login.php" val url = activity.getString(R.string.server) +"/tokenAuth.php" val params = HashMap<String, String>() params["token"] = token params["deviceId"] = deviceId val jsonObj = JSONObject(params) val queue = Volley.newRequestQueue(activity) val req = JsonObjectRequest(Request.Method.POST, url, jsonObj, Response.Listener { response -> val JSONObj = response.getString("Status") if (JSONObj =="200") { // return true myInterface.onCallback(true,activity) } else { // return false myInterface.onCallback(false,activity) } }, Response.ErrorListener { // return false myInterface.onCallback(false,activity) } ) queue.add(req) } else { return false } } else { return false } return false } } fun function4(){ ... } |
但是现在我不知道回调将如何在auth()函数中返回值,以及如何在其他活动中调用此auth()功能。
请帮助我以前从未使用过回调。.
您不能,您已执行的代码是异步执行的,因此您不能在其中有return语句。
但这并不意味着您无法获得价值。最简单的选择是创建一个
下一步,您可以创建一个界面。
1 2 3 | interface MyCallback{ fun onValueChanged() } |
然后在您的活动中实现此接口并覆盖该方法。然后,您可以使用它在异步调用完成时获取回调。请参见下面的代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | interface MyInterface{ fun onCallback(response:Boolean) } class LoginActivity : AppCompatActivity(), AuthListener, MyInterface { val myInterface = this override fun onCallback(response: Boolean) { } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val queue = Volley.newRequestQueue(activity) val req = JsonObjectRequest(Request.Method.POST, url, jsonObj, Response.Listener { response -> val JSONObj = response.getString("Status") if(JSONObj=="200"){ //return true myInterface.onCallback(true) } else{ myInterface.onCallback(false) } }, Response.ErrorListener { // return false } ) queue.add(req) } } |
希望这会有所帮助。谢谢:)