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}")
}

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)
添加回答
舉報