gpt4 book ai didi

ios - Web 服务被调用两次

转载 作者:行者123 更新时间:2023-11-28 06:01:11 25 4
gpt4 key购买 nike

我有一个 webService 调用的问题。

问题是,当我调用服务、调试代码并在控制台打印日志时,我确信我的 webService 只被调用一次(在控制台打印一次日志),但我的请求显然被发送了两次到服务器,我在列表中有重复的数据。

我知道这不是服务器端问题,因为它只发生在 IOS(不是 Android)上。

这是我的调用服务代码:

    public class PersistencyManager {
public func SendPostHttpRequest(baseURL: String, parameter: [String:Any], content: String, closure:@escaping ((_ success:JSON,_ error:NSError?) -> Void)) {
let manager = Alamofire.SessionManager.default
debugPrint("Request parameter ------>",parameter)
debugPrint(" Service URL -------> \(baseURL)")
if let url = URL(string: baseURL) {
var urlRequest = URLRequest(url: url)
urlRequest.setValue("text/html; charset=utf-8", forHTTPHeaderField: "Content-Type")
urlRequest.setURLEncodedFormData(parameters: parameter)
manager.request(urlRequest).responseJSON { response in
switch response.result {
case .success(let JSON) :
debugPrint("get Json response ---> \((JSON)) ")
closure(JSON,nil)
case .failure(let error):
closure(nil,error as NSError)
debugPrint("get error ---> \((error.localizedDescription)) ")
}
}
}
}
}

class LibraryAPI {

static let shareInstance : LibraryAPI = { LibraryAPI() }()
private let persistencyManager : PersistencyManager
init() {
persistencyManager = PersistencyManager()
}
func GetPostResponse(baseURL : String,parameters:[String:Any],contentType: String,closure:@escaping ((_ success:PersistencyManager.JSON,_ error:NSError?) -> Void)) {
persistencyManager.SendPostHttpRequest(baseURL: baseURL, parameter: parameters, content: contentType, closure: { success, error in
closure(success, error)
})
}
}

class TransactionAPI: TransactionProtocol {

static let shareInstance: TransactionAPI = {TransactionAPI()}()

func AddNewManagerRequest(_ parameter: [String : Any], closure: @escaping (([String : Any]?, NSError?) -> Void)) {

let url = Constants.BaseURL + Constants.K_NEWREQPORTERAGE
LibraryAPI.shareInstance.GetPostResponse(baseURL: url, parameters: parameter, contentType: "JSON", closure: {success,error in

var response: [String:Any]?
if let json = success as? [String: Any] {
response = json
}
closure(response, error)

})
}
}

class AddNewOrderViewController: MainViewController {
private func RegisterForNewPorterageRequest() {

let time = Utilities.shareInstance.GetSystemTime()
guard let userID = UserDefaults.standard.value(forKey: "user_id") as? String else {
return
}
StartActivity(activityColor: Constants.ACTIVITY_COLOR)
let token = TokenCreator.shareInstance.CreateTokenWithUserID(userID: userID, methodName: Constants.M_NEWREQUESTPORTERAGE)

request.tok = token
request.time = time
request.user_id = userID

let jsonModel = Utilities.shareInstance.GetJsonForm(objectClass: request)
TransactionAPI.shareInstance.AddNewManagerRequest(jsonModel, closure: {[weak self] success,error in

guard let strongSelf = self else{
return
}

if error != nil {
OperationQueue.main.addOperation {

strongSelf.StopActivity()
strongSelf.CreateCustomTopField(text: Constants.serverError, color: Constants.ERROR_COLOR)
}
}
else {

if let response = success {
debugPrint("add request service call once")

if let status = response["status"] as? String {

if status == "succ" {
OperationQueue.main.addOperation {
strongSelf.presentResultAlert()
}
}else {
OperationQueue.main.addOperation {
strongSelf.StopActivity()
strongSelf.CreateCustomTopField(text: Constants.send_data_error, color: Constants.ERROR_COLOR)
}
}
}
}
}

})
}
}

将日志添加到服务器后,我确保我的请求已两次发送到服务器。

所有控制台日志在控制台打印一次。

我不知道我什么时候调用了两次服务,为什么我的请求两次发送到服务器。

我不明白怎么日志显示一次,服务却被调用了两次?

感谢任何帮助。

最佳答案

确实很费解,但是用这个方法就完美了。我在 persistencyMangerClass 中有这个方法,我使用这个方法代替 SendPostHttpRequest。这两种方法之间的真正区别是什么。 :|

public func SendMultiPartRequestWith(baseUrl: String, parameters: [String : Any],closure: @escaping ((_ success:JSON,_ error:NSError? ) -> Void)){
let manager = Alamofire.SessionManager.default
manager.session.configuration.timeoutIntervalForRequest = 30
manager.session.configuration.timeoutIntervalForResource = 15
debugPrint(" Service URL -------> \(baseUrl)")
debugPrint("Request parameter ------>",parameters)

let headers: HTTPHeaders = [
"Content-type": "multipart/form-data"
]
manager.upload(multipartFormData: { (multipartFormData) in
for (key, value) in parameters {
if let data = value as? Data {
let fileName = (key as String) + ".jpg"
let mimType = (key as String) + "/jpg"
multipartFormData.append(data, withName: key as String, fileName: fileName, mimeType: mimType)
}
else {
if let v = value as? String {
multipartFormData.append("\(v)".data(using: String.Encoding.utf8)!, withName: key as String)
}else {
multipartFormData.append("".data(using: String.Encoding.utf8)!, withName: key as String)
}
}
}
}, usingThreshold: UInt64.init(), to: baseUrl, method: .post, headers: headers) { (result) in
switch result{
case .success(let upload, _, _):
upload.responseString { response in
if let err = response.error{
closure(nil, err as NSError)
return
}
if let JSON = response.result.value {
closure(JSON, nil)
}
}
case .failure(let error):
closure(nil, error as NSError)
}
}
}

关于ios - Web 服务被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49664638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com