异步网络请求和JOSN解析

一. 将字符串转化为NSURL的对象

//把字符串的URL封装成NSURL对象

NSURL * url = [NSURL URLWithString:@"http://www.7160.com//uploads/allimg/140919/9-140919104223.jpg"];

//服务器返回的信息包括图片,视频都是二进制的(NSData)

二.同步下载

//接收二进制

NSData *data = [NSData dataWithContentsOfURL:url];

三.NSURLRequest 和NSMutabbleURLRequest

1.二者为继承关系

NSURLRequest不可变的请求对象 请求的url

NSMutableURLRequest 可变的请求对象

不可变的请求对象一旦创建,url  请求超时的时间都不能更改

2.初始化一个请求对象

//创建一个不可变的请求对象,用一个Url初始化

NSURLRequest *request = [NSURLRequest requestWithURL:url];

四  NSURLConnection

一、NSURLConnection的常用类

(1)NSURL:请求地址

(2)NSURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个NSURL对象,请求方法、请求头、请求体....

(3)NSMutableURLRequest:NSURLRequest的子类

(4)NSURLConnection:负责发送请求,建立客户端和服务器的连接。发送NSURLRequest的数据给服务器,并收集来自服务器的响  应数据

二、NSURLConnection的使用

使用NSURLConnection发送请求的步骤

(1)创建一个NSURL对象,设置请求路径(设置请求路径)

(2)传入NSURL创建一个NSURLRequest对象,设置请求头和请求体(创建请求对象)

(3)使用NSURLConnection发送NSURLRequest(发送请求)

2.代码示例

(1)发送请求的三个步骤:

1.设置请求路径

2.创建请求对象

3.发送请求

三 同步和异步请求

(1)同步请求

//发送同步请求

NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

(2)发送异步请求

-(void)testNSURLConnection{

NSString *urlStr = @"http://iappfree.candou.com:8080/free/applications/limited?currency=rmb&page=1&category_id=";

_data = [[NSMutableData alloc] init];

_connection = [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]] delegate:self startImmediately:YES];

NSLog(@"initWithRequest 执行完成");

}

(3)异步请求的代理方法

//当请求接收到服务器的响应的时候执行该代理方法

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{

NSLog(@"已经接收到服务器响应 %@",string1);

}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{

//     追加数据

[downLoadData appendData:data];

//    计算下载进度(进度=已经下载的数据的大小/总的数据大小)

}

//下载完成执行该方法

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{

//最简单:显示所有应用名字

//解析 JSON

//作用:JSON数据转化为NSArray或NSDictionary

NSDictionary *dict  = [NSJSONSerialization JSONObjectWithData:_data options:NSJSONReadingMutableContainers error:nil];

NSArray *appList = [dict valueForKey:@"applications"];

for (NSDictionary *appDict in appList) {

//NSLog(@"name = %@",appDict[@"name"]);

NSLog(@"currentPrice = %@",appDict[@"currentPrice"]);

}

}

//链接失败执行该方法

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{

}

五,json 数据解析

//NSJSONSerialization利用该类可以将JSON 数据转换为foundation 的对象字典和数组

NSMutableDictionary * jsonDict = [NSJSONSerialization JSONObjectWithData:downloadData options:NSJSONReadingMutableLeaves error:nil];

//NSJSONReadingMutableContainers: 设置此参加那返回的对象是可以随时添加新的值,也就是 Mutable 类型的对象

//NSJSONReadingMutableLeaves: 返回的叶子NSString是可变类型的;

//NSJSONReadingAllowFragments:设置此参数那返回对象是不能再去动态修改的, 如:NSArray NSDictionary

//遇到{} 用字典接收

//遇到[]用数组接收

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式

==================1========================

JSON 语法规则

JSON 语法是 JavaScript 对象表示语法的子集。

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

JSON 名称/值对

JSON 数据的书写格式是:名称/值对。


1


"firstName":"John"

JSON结构有两种结构

1、对象

2、数组

{"people":[

{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},

{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},

{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}

]

}

字典  数组  字典

{"programmers":[

{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},

{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},

{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}

],

"authors":[

{"firstName":"Isaac","lastName":"Asimov","genre":"sciencefiction"},

{"firstName":"Tad","lastName":"Williams","genre":"fantasy"},

{"firstName":"Frank","lastName":"Peretti","genre":"christianfiction"}

],

"musicians":[

{"firstName":"Eric","lastName":"Clapton","instrument":"guitar"},

{"firstName":"Sergei","lastName":"Rachmaninoff","instrument":"piano"}

]}

时间: 2024-08-25 17:50:30

异步网络请求和JOSN解析的相关文章

网络请求和json解析

请求使用AFN框架,json解析使用MJExtension框架 封装网络请求考虑扩展性: 协议头:http,https等 服务器地址或域名 API路径 请求方式:get,post等 传递的输入参数类型也不同 注意点: 设置HTTP请求序列化的文件为json格式 json转模型MJExtention: Model *modelResult = [Model objectWithKeyValues:responseObject]; responseObject为服务器返回的json对象 自定义的模型

iOS开发网络篇—GET请求和POST请求

iOS开发网络篇—GET请求和POST请求 一.GET请求和POST请求简单说明 创建GET请求 1 // 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; 3 NSURL *url=[NSURL URLWithString:u

iOS网络编程开发GET请求和POST请求

iOS网络编程开发GET请求和POST请求 一.GET请求和POST请求简单说明 创建GET请求 // 1.设置请求路径 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; NSURL *url=[NSURL URLWithString:urlStr]

iOS开发网络篇—GET请求和POST请求(转)

一.GET请求和POST请求简单说明 创建GET请求 1 // 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; 3 NSURL *url=[NSURL URLWithString:urlStr]; 4 5 // 2.创建请求对

iOS 自己封装的网络请求,json解析的类

基本上所有的APP都会涉及网络这块,不管是用AFNetWorking还是自己写的http请求,整个网络框架的搭建很重要. 楼主封装的网络请求类,包括自己写的http请求和AFNetWorking的请求,代码简单,主要是框架搭建.简单来说,就是一个请求类,一个解析类,还有若干数据类. 以下代码以公开的天气查询api为例: 1.网络请求类 我把常用的网络请求方法都封装好了,你只需要写自己的接口,传递apiName,params等参数就可以. #pragma mark ios请求方式 //ios自带的

基于redis AE异步网络架构

最近的研究已redis源代码,redis高效率是令人钦佩. 在我们的linux那个机器,cpu型号, Intel(R) Pentium(R) CPU G630 @ 2.70GHz Intel(R) Pentium(R) CPU G630 @ 2.70GHz 上 set,get 都能达到每秒钟15W的请求处理量,真是佩服这代码的效率. 前几篇文章.主要是介绍了主要的代码.比方字符串处理,链表处理.hash等. 这篇文章介绍网络的核心,基于事件反映的异步网络框架. 异步网络处理.是基于epoll的.

基于redis AE的异步网络框架

最近一直在研究redis的源码,redis的高效率令人佩服. 在我们的linux机器上,cpu型号为, Intel(R) Pentium(R) CPU G630 @ 2.70GHz Intel(R) Pentium(R) CPU G630 @ 2.70GHz 上 set,get 都能达到每秒钟15W的请求处理量,真是佩服这代码的效率. 前几篇文章,主要是介绍了基本的代码,比如字符串处理,链表处理,hash等.这篇文章介绍网络的核心,基于事件反映的异步网络框架. 异步网络处理,是基于epoll的.

android内部培训视频_第四节(1)_异步网络操作

第四节(1):异步网络操作  一.结合asyncTask下载网络图片 1.定义下载类,继承自asyncTask,参数分别为:String(url地址),Integer(刻度,本例没有用到),BitMap(下载成功后的图片) public class downloadImageTask extends AsyncTask<String, Integer, Bitmap> { /** * 在线程开始之前执行 */ @Override protected void onPreExecute() {

Github 上Top1的Android 异步网络请求框架

今天给大家分享一个github上Top1的Android异步网络请求框架的使用方法,我给大家分享一个它的基本用法. 先来一个简单的get请求 AsyncHttpClient client = new AsyncHttpClient(); client.get("http://www.google.com", new AsyncHttpResponseHandler() { @Override public void onStart() { // called before reques