swift 获取服务器数据_swift 从服务器获取的数据转成字符串 - CSDN
  • //使用get的方式向服务器请求数据 import UIKit class ViewController: UIViewController { @IBOutlet weak var mytext: UITextField! @IBOutlet weak var outText: UITextView! var na:NSString = "" ...

    //使用get的方式向服务器请求数据
    
    import UIKit
    
    class ViewController: UIViewController {
    
        @IBOutlet weak var mytext: UITextField!
        @IBOutlet weak var outText: UITextView!
        var na:NSString = ""
        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 ClickToConnect(sender: AnyObject) {
            //先将文本框内的字符赋给一个变量
            na = mytext.text!
            //url填入服务器的地址
            NSURLConnection.sendAsynchronousRequest(NSURLRequest(URL: NSURL(string: "http://localhost:8080/MyServer/index.jsp?name=\(na)")!), queue: NSOperationQueue()) { (resp:NSURLResponse?, data:NSData?, error:NSError?) in
                
                //完成之前的操作之后要找到主线程,要对UI在主线程进行修改
                dispatch_sync(dispatch_get_main_queue(), {
                    self.outText.text = NSString(data: data!, encoding: NSUTF8StringEncoding) as! String
                })
                
            }
            
    
        }
    
    }


    服务器端建立个jsp文件,代码如下

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    
    <%
    String str = request.getParameter("name");
    if(str != ""){
    	out.print("Hello "+str);
    }else{
    	out.print("No args");
    }
    %>



    展开全文
  • 但是swift之后对于数据类型十分严格。 就会出现崩溃问题。 不废话上图。这个接口返回的是未读消息数量 标准JSON格式。 但是 unread 没有双引号什么鬼。。。 考 没办法只能 guard守护一下。去防止崩溃,...


    我们的后台使用PHP写的,对于数据类型不规范

    以前用OC还是没问题的。 MVC 或者 KVO都可以

    但是swift之后对于数据类型十分严格。

    就会出现崩溃问题。

    不废话上图。这个接口返回的是未读消息数量

    标准JSON格式。

    但是 unread 没有双引号什么鬼。。。


    没办法只能 guard守护一下。去防止崩溃,但是获取 last_time的时候又崩溃了。

    提示

    Could not cast value of type '__NSCFNumber' (0x3a207798) to 'NSString' (0x3a20dd4c).

    解决方法


    忽略命名规则,我只是临时的。一会再去规范。

    真的是好无语。

    展开全文
  • 网络请求框架用多了,之后发现自己的网络知识都忘了,现在的项目中有一个需求需要给json数据post给服务器,针对这个问题,我又一次入坑了,因为以前一直都是讲参数放在字典里发送给服务器的,但是在这一次,需要给...

    网络请求框架用多了,之后发现自己的网络知识都忘了,现在的项目中有一个需求需要给json数据post给服务器,针对这个问题,我又一次入坑了,因为以前一直都是讲参数放在字典里发送给服务器的,但是在这一次,需要给json数据发送给服务器

    首先看一下,我需要提交给服务器的json字符串长什么样子的,

    [
    {
    “express_id” : “101”,
    “scan_time” : “2017-03-18 10:42:00”,
    “mail_no” : “55636”,
    “cus_name” : “不仅仅就”,
    “mail_weight” : “5556”,
    “operator” : “罗文”,
    “operator_id” : 10000369,
    “op_type” : 0,
    “emp_id” : 10000369
    },
    {
    “express_id” : “101”,
    “scan_time” : “2017-03-18 10:42:08”,
    “mail_no” : “55366”,
    “cus_name” : “韩语uu”,
    “mail_weight” : “5556”,
    “operator” : “罗文”,
    “operator_id” : 10000369,
    “op_type” : 0,
    “emp_id” : 10000369
    }
    ]

    像这种字符串只能转成一个数组,我们的请求框架直接传字典,我不得不想起了。我想起的原生的URLsession,来解决这个问题,确实也解决了这些问题,直接上代码了

      /*  创建Post请求 */
        func PostRequest(data:String,str1:String)
        {
            //(1)设置请求路径
            let url:NSURL = NSURL(string:"http://120.76.239.217:8000/EApi/sprecords/10000369/")!//不需要传递参数
    
        //(2) 创建请求对象
        let request:NSMutableURLRequest = NSMutableURLRequest(url: url as URL) //默认为get请求
        request.timeoutInterval = 5.0 //设置请求超时为5秒
        request.httpMethod = "POST"  //设置请求方法
        request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
        //设置请求体
    
        //把拼接后的字符串转换为data,设置请求体
        print(data)
        request.httpBody = data.data(using: .utf8)
        let session = URLSession.shared
        //(3) 发送请求
        let task = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
            print(data ?? 9)
            print(response ?? 0)
            print(error ?? 9)
            var dict:NSDictionary? = nil
            do {
                dict  = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.init(rawValue: 0)) as? NSDictionary
            } catch {
    
            }
            print("%@",dict ?? 0)
    
        })
        task.resume()
    }
    

    上述的代码,是基于swift3.0,原理也简单,将json字符串放在请求体的内部,当然还需要对请求的对象做一些配置,最后要说的是服务器返回的数据其实是在data当中,我们将它解析之后,就可以做我们想要做的操作

    //继续上面的代码,当我用NSURLSession实现了这一功能,之后我们可能会觉得,项目中,有多处需要发送json,我们需要每次都去写配置请求的代码吗,当然不会了,这时我对网络请求封装一下

    import UIKit
    import Alamofire
    enum MethodType{
        case GET
        case POST
    }
    class  NetworkTools: NSObject {
    
    class func GetDataByNSURLSession(_ dataS:Data,URLstr:String,finishCallBack:@escaping (_ result: AnyObject)->()){
    
            //(1)设置网络请求路径
            let url:NSURL = NSURL(string:URLstr)!//不需要传递参数
    
            //(2) 创建请求对象
            let request:NSMutableURLRequest = NSMutableURLRequest(url: url as URL) //默认为get请求
            request.timeoutInterval = 5.0 //设置请求超时为5秒
            request.httpMethod = "POST"  //设置请求方法
            request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
            //设置请求体
    
            //把拼接后的字符串转换为data,设置请求体
    
            request.httpBody = dataS
            let session = URLSession.shared
            //(3) 发送请求
            let task = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
    
                print(data ?? 9)
    
                print(response ?? 0)
                print(error ?? 9)
    
                var dict:[String:AnyObject]? = nil
    
    
                do {
                    dict  = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.init(rawValue: 0)) as? NSDictionary as! [String : AnyObject]?
                } catch {
    
                }
                print("%@",dict ?? 0)
    
                finishCallBack(dict as AnyObject)
    
            })
            task.resume()
        }}
    ``下面就是调用NetworkTools封装网络请求,我们可以将所有的请求放在一个方法中`
    
    //3.45保存收派件记录```
    
    class  func saveAccept(dataStr:String,_ finishCallBack: @escaping(_ result: AnyObject)->()){
            let url :String = String.init(format: "http://120.76.239.217:8000/EApi/sprecords/%d/", (UserAccount.account?.id)!)
    
    
            let data = dataStr.data(using: .utf8)
            NetworkTools.GetDataByNSURLSession(data!, URLstr: url) { (response) in
    
                finishCallBack(response)
            }
    
     }
    展开全文
  • Swift网络获取数据 如果是https的网址Info.plist中一定添加网络传输协议 ViewController.swift 代码块语法遵循标准Swift代码,例如: class ViewController //表格 var table:UITableView? var ...

    Swift网络获取数据

    如果是https的网址Info.plist中一定添加网络传输协议

    获取网络数据的方法

    第一个: Alamofire (它的原作者就是AFNetworking的原作者,这个就不多说了,你要知道AFNetworking有多重要,多好用,它就有多重要好用!)
    GitHub地址:https://github.com/Alamofire/Alamofire
    第二个: SwiftyJSON 一个解析JSON数据的三方库,使用swift写的,中间帮你省去swift的各种可选值的操作,很简便(推荐!)

    代码示例

    数据地址

    var urlStr = "http://api.jisuapi.com/news/get?channel=\头条&start=0&num=15&appkey=de394933e1a3e2db"
    

    ViewController.swift

    //表格
    var table:UITableView?
    
    var tableDataArr:[NewsModel]?
    
    var mjHeaderView:MJRefreshHeaderView?//下拉刷新
    
    var mjFooterView:MJRefreshFooterView?//上拉加载
    
    
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if let count = tableDataArr?.count {
            return count
        }
        return 0
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let identifier = "cell"
        var cell = tableView.dequeueReusableCell(withIdentifier: identifier)
        if cell == nil {
            cell = UITableViewCell.init(style: .subtitle, reuseIdentifier: identifier)
        }
        let oneNew = self.tableDataArr![indexPath.row]
        cell?.textLabel?.numberOfLines = 0
        cell?.detailTextLabel?.numberOfLines = 0
    
    
        cell?.textLabel?.text = oneNew.title
        cell?.detailTextLabel?.text = oneNew.content
    
        return cell!
    
    
    }
    
    // MARK:=============请求网络数据=================
    func requestNetWorkDataAndUpdateUI() -> Void {
        UIApplication.shared.isNetworkActivityIndicatorVisible = true
    
    
        //请求网络数据
        let urlService = URLService()
        urlService.getNewsData(channel: "头条", startNum: 0) { (data, success) in
            DispatchQueue.main.async {
                UIApplication.shared.isNetworkActivityIndicatorVisible = false
                self.mjHeaderView?.endRefreshing()
            }
    
            if !success{
                DispatchQueue.main.async {
                    let alertVC = UIAlertController(title: nil, message: data as! String, preferredStyle: .alert)
                    let confinBtn = UIAlertAction(title: "确定", style: .default, handler: nil)
                    alertVC.addAction(confinBtn)
                    self.present(alertVC, animated: true, completion: nil)
                }
                return
            }
    
            self.tableDataArr = data as? [NewsModel]
            DispatchQueue.main.async {
                self.table?.reloadData()
            }
        }
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
    
        self.requestNetWorkDataAndUpdateUI()
    
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.table = UITableView.init(frame: self.view.frame, style: .plain)
        self.table?.dataSource = self
        self.view.addSubview(self.table!)
    
        self.mjHeaderView = MJRefreshHeaderView(scrollView: self.table!)
    
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    

    URLService.swift

    func getNewsData(channel:String,startNum:Int,completion:@escaping (Any,Bool)->Void) -> Void {
        //使用GET请求数据
        // (1) 网址字符串拼接
        var urlStr = "http://api.jisuapi.com/news/get?channel=\(channel)&start=\(startNum)&num=15&appkey=de394933e1a3e2db"
        // (2) 转码
        urlStr = urlStr.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlFragmentAllowed)!
        // (3) 封装为URL对象
        let url = URL(string: urlStr)
        // (4) 封装为URLRequest对象
        let req = URLRequest(url: url!, cachePolicy: .reloadIgnoringCacheData, timeoutInterval: 5.0)
        // (5) 使用URLSession请求网络数据
        let task:URLSessionDataTask = URLSession.shared.dataTask(with: req) { (data, response, error) in
            // 如果错误
            if error != nil{
                //参数闭包的调用n
                completion("网络服务器错误",false)
                return
            }
            // json数据解析
            let jsonData = try? JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments)
    
            if jsonData == nil{
                completion("网络数据错误",false)
                return
            }
    
            let status = (jsonData as! NSDictionary).value(forKey: "status") as! String
            let msg = (jsonData as! NSDictionary).value(forKey: "msg") as! String
    
            if Int(status)! != 0{
                completion(msg,false)
                returnnnt
            }
    
            let result = (jsonData as! NSDictionary).value(forKey: "result") as! NSDictionary
            let list = result.value(forKey: "list") as! NSArray
    
            var newsArr:[NewsModel] = []
    
            for item in list{
                let dic = item as! NSDictionary
    
                let oneNew = NewsModel()
                oneNew.title = dic.value(forKey: "title") as! String
                oneNew.content = dic.value(forKey: "content") as! String
                oneNew.time = dic.value(forKey: "time") as! String
                oneNew.url = dic.value(forKey: "url") as! String
                oneNew.weburl = dic.value(forKey: "weburl") as! String
    
                newsArr.append(oneNew)
    
            }
            completion(newsArr,true)
    
        }
        // (6)开启任务
        task.resume()
    
    
    }
    

    NewsModel.swift

    var channel:String = ""
    var content = ""
    var title = ""
    var time = ""
    var src = ""
    var category = ""
    var url = ""
    var weburl = ""
    
    展开全文
  • 1、使用AFNetWorking获取服务器数据,先在项目中假如AFNetWorking 2、需要使用的类中假如 #import "AFHTTPRequestOperationManager.h" 3、在appDelegate中创建AFHTTPRequestOperationManager - (BOOL)...

    1、使用AFNetWorking获取服务器数据,先在项目中假如AFNetWorking

    2、需要使用的类中假如

    #import "AFHTTPRequestOperationManager.h"

    3、在appDelegate中创建AFHTTPRequestOperationManager

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

        // Override point for customization after application launch.

        // 创建AFHTTPRequestOperationManager对象

        self.manager = [AFHTTPRequestOperationManager manager];

        // AFHTTPRequestOperationManager对象指定使用HTTP响应解析器,这里可以注释,默认使用的是

        self.manager.responseSerializer  = [[AFHTTPResponseSerializer alloc] init];

        

        return YES;

    }

    4、使用post请求,发起请求也是用json数据,获取可以在第三步指定

     //申明请求的数据是json

            appDelegate.manager.requestSerializer = [AFJSONRequestSerializer serializer];

            

            //设置开启https请求

            appDelegate.manager.securityPolicy.allowInvalidCertificates = YES;


     [appDelegate.manager

             //请求方式

             POST:Netaddress

             // 指定请求参数

             parameters:params

             // 获取服务器响应成功时激发的代码块

             success:^(AFHTTPRequestOperation *operation, id responseObject)

             {

                 NSLog(@"login success");

                 // 当使用HTTP响应解析器时,服务器响应数据被封装在NSData

                 // 此处将NSData转换成NSString、并使用UIAlertView显示登录结果

                 [[[UIAlertView alloc] initWithTitle:@"登录结果" message:

                   [[NSString alloc] initWithData:responseObject encoding:

                    NSUTF8StringEncoding]

                                            delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil]

                  show];

                 

                 

             }

             // 获取服务器响应失败时激发的代码块

             failure:^(AFHTTPRequestOperation *operation, NSError *error)

             {

                 

                 NSLog(@"获取服务器响应出错!%@",error);

             }];

    5、分别在代码中处理成功和失败就可以了



    展开全文
  • 根据公司需求,这几天一直在研究iOS原生请求JSON的功能需求,当中遇到了不少的坑以及困扰,因此在这里详细的介绍取服务器数据; 实现获取服务器json数据 利用POST提交 利用GET提交 得到JSON数据并进行解析 显示到...
  • 一: Swift 网络数据请求与处理最常用第三方   又有时间出来装天才了,还是在学swift,从中又发现一些问题,这两天上网找博客看问题弄的真的心都累。博客一篇写出来,好多就直接照抄,就没有实质性的把问题解决...
  • Swift 基本数据类型

    2018-03-30 10:54:13
    基本数据类型–整型 var imInt: Int = 80 //有符号整型 // Int 其存储空间是有限的,位数默认跟机器相应 Int.max //查看最大值 Int.min //查看最小值 var imUInt: UInt = 80 //无符号整型 UInt.max //是Int.max...
  • 前言为了能够写出有价值的应用,除了游戏,即便是游戏也需要网络支持才能让用户产生粘性,游戏中比较获取的等级、积分等如果只保存在手机上,则无法与其他好友进行比较和互动,让我们的应用(或游戏)的互动性大打折扣...
  • 曾志良. All rights reserved. // ...//使用NSURLConnection进行数据的提交和获取(POST与GET) import UIKit class LANNetworkNSURLConnection: NSObject,NSURLConnectionD
  • 封装伊始 首先声明一个类继承于AFHTTPSessionManager class SwiftHttpNetwork: AFHTTPSessionManager func setBaseUrl (baseURL:NSString?,timeOutInterval :Double ){ SwiftHttpNetwork._baseURL = baseURL ...
  • //MARK: - 心率数据 睡眠数据请求  func netWorkingForHeartDate() {  let studentId = ShareManager.shareInstance().userinfo.selectChild.id  let format:DateFormatter = DateFormatter()
  • Swift数据获取和建模

    2020-07-15 14:52:58
    从项目Bundle中获取json文件中数据 源码参考 我们可以先写一个Bundle扩展类方便读取数据 extension Bundle { func decode<T: Codable>(_ file: String) -> T { guard let url = Bundle.main.url(for...
  • Swift 使用JSON数据结构

    2019-06-21 10:16:37
    如果你的APP从服务器获取到的数据格式为JSON。你可以使用JSONSerialization把JSON解析成Swift数据类型,比如Dictionary,Array,String,Number,Bool。不过,因为你的APP不能直接使用JSON的结构,可以将它解析成模型...
  • 本文根据另一份OC上传文件的...改写后的 swift 代码如下 //MARK: UploadFile class UploadFile {  // 拼接字符串  let boundaryStr = "--" // 分隔字符串  let randomIDStr = "----------thinkyouitcast-
  • Swift服务器端的应用...幸运的是,Perfect公司公布了最新的免费开源项目Perfect SysInfo,即用于实时获取系统性能指标数据的一组函数库。作为参考,本文的全部源代码可以在这里获得: http://github.com/PerfectEx
  • Hi,本篇文章主要讲解如何利用服务端,获取json数据并且动态显示到UITableView之中; 分别思路逻辑有以下: 1.建立该需要项目文件,如:PurchaseView.h(样式),PurchaseController.h(逻辑); 2.使用的AFNetworking,...
  • 最近在做一个项目,输入英文之外的文字上传服务器取回来之后乱码,原来是输入的文字没转码 添这一行代码,先转成utf-8 var a:String = textfiled.text  var aStr = a.stringByAddingPercentEscapesUsingEncoding...
  • <p>I'm using the following function in Swift to connect to a PHP Script on a server and then process my request:</p> <pre><code>func pushtoserveronclick() { var URL: NSURL = NSURL(string: ...
  • 看完本文您将能够实现下面效果 Jietu20200415-123827@2x.jpg ...掌握从服务器获取JSON或文本 将JSON转为struct类型 将数据存储到手机里面 从手机里读取存储的数据 什么是API API(Application Programmin...
1 2 3 4 5 ... 20
收藏数 7,469
精华内容 2,987
关键字:

swift 获取服务器数据