У меня небольшие проблемы с Alamofire. У меня есть функции сервера, которые успешно работают на устройствах Android. Все отлично работает и все данные работают без проблем. Но на iOS каждый раз, когда я отправляю запрос на публикацию с более чем 2 параметрами, я получаю сообщение об ошибке с сервера, поэтому я не могу опубликовать данные. Я пытался поместить post в виде строки в пользовательской кодировке, потому что, когда я помещал параметры в метод Alamofire.request, я также получал сообщение об ошибке, но тогда ответ сервера был «ошибка в обработчике удаления». Таким образом, я изменил весь JSON в строку благодаря расширению String, затем я изменил все "[" и "]" на "{", "}", но все равно не могу сохранить данные на сервер.
Кодированный словарь и преобразованный в JSON в Swift выглядит следующим образом:
звонки =% 7B% 220% 22% 3A% 7B% 22call% 5Fdate% 22% 3A% 222018% 2D06% 2D27% 2B11% 3A30% 3A46% 22% 2C% 22number% 22% 3A% 22462462432% 22% 2C% 22sms% 22% 3A% 220% 22% 2C% 22duration% 22% 3A% 220% 22% 2C% 22type% 22% 3A211% 7D% 7D
Словарь в Swift
["calls": ["0": ["call_date": "2018-06-27+11:49:18", "number": "56262621", "sms": "0", "duration": "0", "type": 211]]]
С другой стороны, то же приложение на Android прекрасно работает с теми же данными.
Кодированный JSON на Java выглядит следующим образом:
* Тысячу двадцать-два * звонки =% 7B% 220% 22% 3A% 7B% 22number% 22% 3A% 22852486258965% 22% 2C% 22duration% 22% 3A% 220% 22% 2C% 22type% 22% 3A211% 2C% 22call_date% 22% 3A% 222018-06-27 + 11% 3A53% 3A53% 22% 2C% 22sms% 22% 3A% 220% 22% 7D% 7D * * тысяча двадцать три
JSON на Java
{"calls":{"0":{"number":"852486258965","duration":"0","type":211,"call_date":"2018-06-27 11:53:53","sms":"0"}}}
Почему в Android App все работает, а на iOS - вообще не работает? У кого-нибудь есть идея для этого?
Функция в Swift
func sendStoreCalls(parameters: Dictionary<Int, Dictionary<String, Any>>) {
var params: Parameters = [:]
var par: Parameters = [:]
var pa: [String:Any] = [:]
var i = 0
for (_, param) in parameters {
if param["isSend"] as! Int == 0 {
par["duration"] = param["callTime"]
par["sms"] = "0"
let callDate: String = param["callDate"] as! String
par["type"] = param["callType"]
par["call_date"] = callDate.replacingOccurrences(of: " ", with: "+", options: .literal, range: nil)
if param["callNumber"] as! String != "" {
par["number"] = param["callNumber"]
}
params[String(i)] = par
i += 1
}
}
pa["calls"] = params
let token: String = SharedPreferences.getPrefToken()!
let bufferedParams = pa.queryParameters
let transformedPar = bufferedParams.replacingOccurrences(of: "%5B", with: "%7B", options: .literal, range: nil).replacingOccurrences(of: "%5D", with: "%7D", options: .literal, range: nil)
let trn = transformedPar.replacingOccurrences(of: "%C2A0", with: "", options: .literal, range: nil).replacingOccurrences(of: "%20", with: "", options: .literal, range: nil)
let url = "https://url.com?api_token=\(token)"
Alamofire.request(url, method: .post, encoding: JSONStringArrayEncoding.init(string: trn))
.responseJSON {
response in
print(NSString(data: (response.request?.httpBody)!, encoding: String.Encoding.utf8.rawValue)!)
switch response.result {
case .success(let value):
let json = JSON(value)
print(json["message"].rawString()!)
case .failure(let error):
if let data = response.data {
print("ERROR!!!")
print(String(data: data, encoding: String.Encoding.utf8)!)
}
print(error)
}
}
}