отправлять различные типы параметров сообщения в API в Kotlin - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь отправить различные типы параметров сообщения в API, но это не работает правильно.Любая идея, почему?

Вот мой код.

Сначала я упаковываю свои параметры в простой контейнер и передаю его в качестве параметра в 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) получатель: Аргументы MutableMap: (String, String) могут быть применены к получателю: Аргументы HashMap: (String, String)

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

var name = params[0].paramName - это строка

var address = params[0].paramaddress - это строка

Поэтому, когда вы делаете:

hashMap["name"] = name
hashMap["address"] = address

, используя Hashmap, подобный этому var hashMap = java.util.HashMap<String, MyParams>() itПредположим, вам нужно создать HashMap, например, HashMap, а не HashMap.

Измените тип вашей Hashmap или отправьте тип MyParams в значениях вашей Hashmap.

0 голосов
/ 06 июня 2018

Как вы сказали, вы объявили hashMap как переменную типа HashMap<String, MyParams>, в то время как вы пытаетесь put a String, а String "не" MyParams.

Чтобы решить эту проблему, вы должны либо изменить MyParams на String (т. Е. val hashMap = HashMap<String, String>(), что, я думаю, именно то, что вам действительно нужно), либо вставить правильное значение внутри карты (т. Е. hashMap["name"] = params[0]).

Кстати, var paramlatitude: Float = 0.toFloat() можно было бы упростить до var paramLatitude = 0F

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...