一步一步做一个联网传感器系统 ------ IOS手机端实现(第六篇)

 

第五篇我们实现了利用网页去读取数据,但是这显然不是最好的办法。我们应该写一个手机APP来显示每一项的数据,这样更有逻辑更有条理。

一 环境

iphoneX, macOS10.13,xcode9

首先是我们的基本界面:

 

 

4个label空间,一个button控件。没什么好说的,直接看程序:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var tempLabel: UILabel!
    @IBOutlet weak var humLabel: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func getDataFromServer(_ sender: Any) {
        let urlString = "http://zyltest.3w.dkys.org/phone?op=getdata"
        let url = URL(string:urlString)
        let request = URLRequest(url:url!)
        let session = URLSession.shared
        

        let dataTask = session.dataTask(with: request,
                                        completionHandler:{(data, response, error)->Void in
                                            if error != nil{
                                                print(error.debugDescription)
                                            }else{
                                                let str = String(data: data!, encoding: String.Encoding.utf8)
                                                let data = str?.split(separator: ",").map(String.init)
                                                let temp = data![0]
                                                let hum = data![1]
                                                DispatchQueue.main.async(execute: {
                                                    self.tempLabel.text = temp
                                                    self.humLabel.text = hum
                                                })
                                            }
        }) as URLSessionTask
        dataTask.resume()
    }
}

其他代码都是Xcode生成的,我们主要的代码是这个函数:@IBAction func getDataFromServer(_ sender: Any)

这是一个事件函数,它代表按钮控件被点击了一下。即:按钮被点击,就会运行这个函数。

函数首先定义了要访问的IP地址,也就是上一篇内网穿透之后的网址。

然后,利用session.dataTask开启了GET访问,它有两个参数,一个是request,一个是回调函数。request就是GET请求,毁掉函数就是当我们接收到服务器的返回信息时,要做些什么。

这个回调函数有三个参数:data,response,error。分别代表:返回的数据,服务器对请求的响应,错误。接下来的if语句则是判断这次GET请求有没有错误,有错误就把错误打印出来,在Xcode中显示。没有错误就开始分析data。data代表服务器返回的数据,也就是上一篇中,服务器程序的return语句。

服务器返回"temp,hum",它有三个部分,温度temp,逗号“,”和湿度hum,我们要将温度和湿度分开,所以使用了split方法,利用“,”将两者分开。

IOS系统对UI的更新,是在主线程中。而session.dataTask对网络的请求则发生在子线程中,在子线程中更新UI会导致警告,并且更新速度会非常非常慢。所以,我们使用 DispatchQueue.main.async方法,将UI的更新同步到主线程中。

将APP下载到手机中,如下图所示:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值