网络请求不工作

Posted

技术标签:

【中文标题】网络请求不工作【英文标题】:Web Request do catch not working 【发布时间】:2016-11-14 20:34:52 【问题描述】:

我想创建一个调用服务器并获取 JSON 信息的小应用程序。服务器返回的东西是这样的:

"temperature":23.60,"humidity":18.40

我的代码是这样的:

    let requestURL: NSURL = NSURL(string: "http://esp_0b48a1:1337/")!
    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(url: requestURL as URL)
    let session = URLSession.shared
    let task = session.dataTask(with: urlRequest as URLRequest) 
        (data, response, error) -> Void in

        let httpResponse = response as! HTTPURLResponse
        let statusCode = httpResponse.statusCode

        if (statusCode == 200) 
            print("Everyone is fine, file downloaded successfully.")
            do
                let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String:AnyObject]

                if let temp = json["temperature"] as? String 
                    self.degrees.text = temp + "°C";
                    print(temp);
                
                if let hum = json["humidity"] as? String 
                    self.hum.text = hum + "%";
                    print(hum);
                
            catch
                print("error");
                self.degrees.text = "no Temperature";
                self.fill.text = "with";
                self.degrees.text = "some errors like " + String(statusCode);
            
        
    

    task.resume()

我正在 MainViewController 的 viewDidLoad 函数中执行它。 我得到输出“每个人都很好,文件 dl 成功”,但没有更多的输出。不是 do 块中的那个,也不是 catch 中的那个输出,它不会改变 UILabel。 但在我的 WebServer 上,我可以看到它收到了一个请求!

任何想法为什么? 我通过 http 连接并将 App Transport Security Settings 中的 Allow Arbitrary Loads 设置为 yes (info.plist)

dunklesToast

【问题讨论】:

您需要在主队列上调度 ui 更新,但我建议您在闭包中设置断点并逐步查看发生了什么。您的值似乎是浮点数而不是字符串,所以我的猜测是您的条件向下转换失败 【参考方案1】:

铸造成一个浮动应该让你去。我建议添加一个 else 来处理铸造失败。

 if let temp = json["temperature"] as? Float 
                self.degrees.text = temp + "\(temp)°C";
                print(temp);
 else
 //handle this outcome
 

 if let hum = json["humidity"] as? Float 
           self.hum.text = hum + "\(hum)°C";
           print(hum);
 
 else
 //handle this outcome
 

【讨论】:

成功了!但我不得不将temp + "°C" 更改为"\(temp)°C",因为您不能使用+ 将浮点数和字符串放在一起。谢谢! 是的!确实如此。

以上是关于网络请求不工作的主要内容,如果未能解决你的问题,请参考以下文章

模拟服务工作者无法拦截网络请求

发布请求 Axios : 网络错误

如何使用 afnetworking 取消网络请求

Python网络请求库Requests,妈妈再也不会担心我的网络请求了

开发人员工具:跨弹出窗口跟踪网络请求

工作管理器:如何仅在网络请求完成时返回结果