我尝试在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
我收到以下错误:
类型推断失败:无法在内联运算符乐趣中推断类型参数V MutableMap.set(键:K,值:V):单位以下替换接收器:MutableMap参数:(String,Params)receiver:MutableMap arguments:(String ,String)可以应用于接收器:HashMap参数:(String,String)
2 回答
如你所说,你将
hashMap
声明为HashMap<String, MyParams>
类型的变量,而你正在尝试put
aString
和String
"is not"MyParams
.要解决此问题,您应该将
MyParams
更改为String
(即val hashMap = HashMap<String, String>()
,我猜这是您真正想要的),或者在 Map 中插入正确的值(即hashMap["name"] = params[0]
) .顺便说一句,
var paramlatitude: Float = 0.toFloat()
可以简化为var paramLatitude = 0F
var name = params[0].paramName
是一个字符串var address = params[0].paramaddress
是一个字符串所以当你这样做时:
使用像这样的Hashmap
var hashMap = java.util.HashMap<String, MyParams>()
它假设你必须像HashMap那样创建一个HashMap而不是HashMap .更改Hashmap的类型或在Hashmap的值中发送MyParams类型 .