iOS 使用NSURLConnection连接服务器和JSON作为数据交换方式

本文档介绍如何在iOS应用中使用NSURLConnection与服务器进行JSON数据交换。内容涵盖JSON的基础知识,通过一个示例APP演示了如何接收和发送JSON数据,包括创建请求、设置URL、解析响应数据并展示在UITableView上。同时,还讲解了如何构建要发送的数据并使用NSJSONSerialization将其转换为JSON格式。
摘要由CSDN通过智能技术生成

源码请到Github下载:https://github.com/manguoge/MessageBoard-JSON(点星支持一下哦奋斗)

一、JSON简介

JSON是一种轻量级的在服务器、网站和APP之间发送数据的极佳的方式,相比较于XML,JSON更加轻量级、网络效率更高、带宽要求更低使用iOS对JSON的支持(如苹果官方的NSJSONSerialization、第三方的SBJSON和JSONKit),可以很轻松的在iOS项目中集成JSON。JSON语法简单直观,JSON文档可以直接包含字典对象和数组对象。

二、demo详解

本文通过一个示例APP详细介绍了如何使用JSON进行APP和服务器端的数据发送和接收,包括一个Ruby on Rails服务器和一个ios应用。这个服务器支持以JSON发送和接收数据。ios应用从服务器获取消息,并在标准表视图中显示他们,还能够像服务器发送JSON格式的消息。

(一、接收数据)

1.创建请求设置服务器URL,让应用能够向正确的地址发送请求

#define kRequestURLString @"http://freezing-cloud-6077.herokuapp.com/messages.json"

接下来创建请求和连接,发起网络请求服务器提供URL处的message.json数据,如果成功建立连接,调用代理方法,将返回的数据保存在本地。  

//请求
    NSURL* requestURL=[NSURL URLWithString:kRequestURLString];
    NSURLRequest* request=[[NSURLRequest alloc] initWithURL:requestURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.];
    //连接
    NSURLConnection* theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
    if (theConnection)
    {
        connectData=[[NSMutableData alloc] init];
        NSLog(@"the Connection is scuess:%@",theConnection);
    }
    else
    {
        NSLog(@"Connection Failed!");
        self.activityView.hidden=YES;
        [self.activityIndicator stopAnimating];
    }
}

2.实现连接的代理方法,获取数据,查看数据

#pragma -mark NSURLConnectionDelegate,NSURLConnectionDataDelegate
//当服务器响应时激发该方法
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [connectData setLength:0];
}
//每次读取服务器数据时激发该方法,对于一个请求而言,服务器数据可能要分几次才能读完,一次该方法一般会被调用多次,所以建议使用NSMutableData来手机数据,然后可以整体转换为字符串对象。
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [connectData appendData:data];
}
//当连接服务器发送错误时激发该方法,通过error获取错误信息
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    
}
//当上传或者下载数据完成时激发该方法,之后激发一次
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSString* responseStr=[NSString stringWithUTF8String:[connectData bytes]];
    NSLog(@"responseStr:%@",responseStr);
    
    NSError* error=nil;
    NSArray* jsonArray=[NSJSONSerialization JSONObjectWithData:connectData options:0 error:&error];
    if (!error)
    {
        messageArray=jsonArray;
        NSLog(@"messageArray:%@",messageArray);
        [self.MessageTableView reloadData];
    }
    else
    {
        NSLog(@"parsing error:%@",error);
    }
    [self.activityView setHidden:YES];
    [self.activityIndicator stopAnimating];
}

3.显示数据在表UITableView上。


(二、发送数据)

将输入的数据通过NSJSONSerialization转换为JSON数据发送到服务器。

1.构建要发送的数据

//构建发送的数据
    NSMutableDictionary* messageDict=[[NSMutableDictionary alloc] initWithCapacity:1];
    [messageDict setObject:inputName forKey:@"name"];
    [messageDict setObject:inputMessage forKey:@"message"];
    [messageDict setObject:[dateFormatter stringFromDate:date] forKey:@"message_date"];
    NSDictionary* postDict=[NSDictionary dictionaryWithObject:messageDict forKey:@"message"];
    //将数据转换为JSON格式
    NSError* JSONSerialerror=nil;
    NSData* jsonData=[NSJSONSerialization dataWithJSONObject:postDict options:NSJSONWritingPrettyPrinted error:&JSONSerialerror];

2.为向服务器发送数据,首先使用NSMutableURLRequest请求(相比于NSURLRequest的好处是可以添加请求头和请求参数)。 

    //创建请求
    NSURL* messageURL=[NSURL URLWithString:kRequestURLString];
    NSMutableURLRequest* request=[NSMutableURLRequest requestWithURL:messageURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.];
    //请求方式是发送
    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accect"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setValue:[NSString stringWithFormat:@"&d",[jsonData length]] forHTTPHeaderField:@"Content-Length"];
    //将要发送的数据添加到请求头
    [request setHTTPBody:jsonData];
    //根据请求创建连接
    NSURLConnection* sendConnecttion=[[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES];


至此,成功。

源代码请到Github下载:https://github.com/manguoge/MessageBoard-JSON(点星支持一下哦奋斗)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值