Kotlin (वॉली) में getParam को ओवरराइड नहीं कर सकते

Nov 25 2020

मैं getParamनीचे दिखाए गए की तरह ओवरराइड नहीं कर सकता । मुझे आशा है कि कोई व्यक्ति बता सकता है कि getParamकोटलिन में ओवरराइड कैसे किया जाता है ।

build.gradle

implementation 'com.android.volley:volley:1.1.1'

fun testpost(button: Button)
{
    val url = "http://192.168.178.23/insertcode.php"
    val queue = Volley.newRequestQueue(this)


    val stringRequest = StringRequest(Request.Method.POST, url,
            { response ->
                button.text = "Response is: ${response}"
            },
            { button.text = "That didn't work!" })
    {
        override fun getParam(){

        }
    }
    queue.add(stringRequest)
}

जवाब

1 DavidKroukamp Nov 25 2020 at 21:18

आप StringRequestउस मामले के लिए अनुरोध में निर्मित या किसी अन्य में उजागर नहीं कर सकते । यदि वास्तव में आपको क्या करने की आवश्यकता है, तो आपको दुर्भाग्य से अपना स्वयं का कस्टम अनुरोध बनाना होगा ।

नीचे एक कस्टम के लिए एक उदाहरण है StringRequestजो हमें paramsइसके निर्माता ( कोटलिन ) में निर्दिष्ट करने की अनुमति देता है :

import androidx.annotation.GuardedBy
import com.android.volley.NetworkResponse
import com.android.volley.Request
import com.android.volley.Response
import com.android.volley.toolbox.HttpHeaderParser
import java.io.UnsupportedEncodingException
import java.nio.charset.Charset

class CustomStringRequest(
    method: Int,
    url: String,
    listener: Response.Listener<String>,
    errorListener: Response.ErrorListener?,
    private val params: MutableMap<String, String>
) : Request<String>(method, url, errorListener) {

    private val lock = Any()

    @GuardedBy("lock")
    private var listener: Response.Listener<String>? = listener

    override fun getParams(): MutableMap<String, String> {
        return params
    }

    override fun cancel() {
        super.cancel()
        synchronized(lock) { listener = null }
    }

    override fun deliverResponse(response: String) {
        var listener: Response.Listener<String>?
        synchronized(lock) { listener = this.listener }
        if (listener != null) {
            listener!!.onResponse(response)
        }
    }

    override fun parseNetworkResponse(response: NetworkResponse): Response<String> {
        val parsed: String = try {
            String(response.data, Charset.forName(HttpHeaderParser.parseCharset(response?.headers)))
        } catch (e: UnsupportedEncodingException) {
            // Since minSdkVersion = 8, we can't call
            // new String(response.data, Charset.defaultCharset())
            // So suppress the warning instead.
            String(response.data)
        }

        return Response.success(
            parsed,
            HttpHeaderParser.parseCacheHeaders(response)
        )
    }
}

आप तब इसका उपयोग करेंगे:

// Instantiate the RequestQueue.
val queue = Volley.newRequestQueue(activity)
val url = "YOUR_URL"

// Request a string response from the provided URL.
val stringRequest = CustomStringRequest(
    Request.Method.POST, url,
    Response.Listener { response ->
        // TODO do something with response
    },
    Response.ErrorListener {
        // TODO handle errors
    },
    hashMapOf("name" to "value") // TODO add your params here
)

// Add the request to the RequestQueue.
queue.add(stringRequest)
1 Danixo Nov 26 2020 at 00:06

StringRequest से पहले ऑब्जेक्ट टाइपिंग और अब विधि getParams उपलब्ध है।

कोड इस तरह दिखता है:

fun testpost(button: Button)
    {
        val url = "http://192.168.178.23/insertcode.php"
        val queue = Volley.newRequestQueue(this)


        val stringRequest = object :StringRequest(Request.Method.POST, url,
            { response ->
                button.text = "Response is: ${response}"
            },
            { button.text = "That didn't work!" })
        {
            //Press Ctr + O to find getParams
            override fun getParams(): MutableMap<String, String> {
                val hashMap = HashMap<String, String>()
                hashMap.put("name", "peter")
                return hashMap
            }
        }
        queue.add(stringRequest)
    }