第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Volley 中發(fā)出發(fā)布請求的通用函數

在 Volley 中發(fā)出發(fā)布請求的通用函數

拉風的咖菲貓 2023-05-10 17:15:56
我致力于開發(fā)一個 android 應用程序,我想制作一個通用的 volley post 請求功能,我將我的功能編寫如下: public fun <T> push(context: Context, url: String, myObject: T, completion: (response: String) -> Unit) {        val queue = Volley.newRequestQueue(context)        val sr = object : StringRequest(            Method.POST, url,            Response.Listener { response ->                println(response)                completion(response)            },            Response.ErrorListener { volleyError ->                Common.showVolleyError(volleyError, context)            }) {            override fun getParams(): Map<String, String> {                val params = myObject as HashMap<String, String>                return params            }            @Throws(AuthFailureError::class)            override fun getHeaders(): Map<String, String> {                val params = HashMap<String, String>()                params["Content-Type"] = "application/x-www-form-urlencoded"                params["X-Requested-With"] = "XMLHttpRequest"                return params            }        }        sr.retryPolicy = DefaultRetryPolicy(            0,            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT        )        queue.add(sr)    }我強制執(zhí)行的是如何將我的可序列化對象轉換為一個HashMap<String, String>(),即如何綁定myObject到getParams()函數,
查看完整描述

2 回答

?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

最后,對于任何可能喜歡使用這種方式的人,我將函數重寫如下:


public fun <T> push(context: Context, url: String, myObject: T,myObjectType : Array<Field>, completion: (response: String) -> Unit) {


    val myObjectAsDict = HashMap<String, String>()

    val allFields = myObjectType //:Array<Field> = myObjectType!!::class.java.declaredFields

    for ( field in allFields) {

        if (!field.isAccessible) {

            field.isAccessible = true

        }



        val value = field.get(myObject)

        if (value != null)

        {

            if( field.name != "serialVersionUID") {

                myObjectAsDict[field.name] = value.toString()

            }

        }

    }


    println(myObjectAsDict)


    val queue = Volley.newRequestQueue(context)

    val sr = object : StringRequest(

        Method.POST, url,

        Response.Listener { response ->

            println(response)

            completion(response)

        },

        Response.ErrorListener { volleyError ->

            Common.showVolleyError(volleyError, context)

        }) {


        override fun getParams(): Map<String, String> {

            val params = myObjectAsDict

            return params

        }


        @Throws(AuthFailureError::class)

        override fun getHeaders(): Map<String, String> {

            val params = HashMap<String, String>()

            params["Content-Type"] = "application/x-www-form-urlencoded"

            params["X-Requested-With"] = "XMLHttpRequest"

            return params

        }

    }


    sr.retryPolicy = DefaultRetryPolicy(

        0,

        DefaultRetryPolicy.DEFAULT_MAX_RETRIES,

        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT

    )

    queue.add(sr)

}

并使用它如下:


 var myClass = MyClass()

        VolleyFunctions.push(this,"URL",myClass, MyClass::class.java.declaredFields)

        {

                response->

            myClass = Gson().fromJson(response, MyClass::class.java)

            println("myClass.Name${myClass.name}")

        } 


查看完整回答
反對 回復 2023-05-10
?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

使基類包含一個抽象方法返回Map<String, String>命名為 example getConvertedParams。此方法應將自身轉換為Map<String, String>:


val params = HashMap<String, String>()

params["attribute1"] = attribute1

params["attribute2"] = attribute2

...

return params

每個請求對象都應該擴展該基類并覆蓋該方法。在getParams您發(fā)送請求的地方,調用getConvertedParams您的通用請求對象。


override fun getParams(): Map<String, String> {

   val params = myObject.getConvertedParams()

   return params

}

也不要忘記更改方法簽名


public fun <BaseClassName> push(context: Context, url: String, myObject: BaseClassName, completion: (response: String) -> Unit)



查看完整回答
反對 回復 2023-05-10
  • 2 回答
  • 0 關注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號