我尝试在 api 中发送不同类型的 post 参数,但它没有正常工作。知道为什么吗?
这是我的代码。
首先,我将参数包装在一个简单的容器中,并将其作为参数传递给 AsyncTask,如下所示:
class MyParams {
var paramName: String = ""
var paramaddress: String = ""
var paramlatitude: Float = 0.toFloat()
var paramlongitude: Float = 0.toFloat()
constructor(funName: String, funAddress: String, funLatitude: Float, funLongitude: Float) {
this.paramName = funName
this.paramaddress = funAddress
this.paramlatitude = funLatitude
this.paramlongitude = funLongitude
}
}
class myClass : AsyncTask<MyParams, Void, String>() {
override fun onPreExecute() {
super.onPreExecute()
}
override fun onPostExecute(httpResponseMsg: String) {
super.onPostExecute(httpResponseMsg)
...
}
override fun doInBackground(vararg params: MyParams): String {
var name = params[0].paramName
var address = params[0].paramaddress
var latuitude = params[0].paramlatitude
var longitude = params[0].paramlongitude
hashMap["name"] = name
hashMap["address"] = address
hashMap["latuitude"] = latuitude
hashMap["longitude"] = longitude
finalResult = httpParse.postRequest(hashMap, HttpURL)
println("responseeeeeeeee-----="+finalResult)
return finalResult
}
}
val params = MyParams(funName,funAddress,funLatitude,funLongitude)
val myTask = myClass()
myTask.execute(params)
但是在这一行 hashMap["name"] = name
我得到了以下错误:
Type inference failed: Cannot infer type parameter V in inline operator fun MutableMap.set(key: K, value: V): Unit None of the following substitutions receiver: MutableMap arguments: (String,Params) receiver: MutableMap arguments: (String,String) can be applied to receiver: HashMap arguments: (String,String)
最佳答案
如你所说,你声明了hashMap
作为 HashMap<String, MyParams>
类型的变量, 当你试图 put
一个String
, 和 String
“不是”MyParams
.
要解决此问题,您应该更改 MyParams
至 String
(即 val hashMap = HashMap<String, String>()
,我猜这是您真正想要的),或在 map 中插入正确的值(即 hashMap["name"] = params[0]
)。
顺便说一下,var paramlatitude: Float = 0.toFloat()
可以简化为 var paramLatitude = 0F
关于android - 在 kotlin 的 api 中发送不同类型的 post 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50713579/