美文网首页
Joke基本项目构建2 网络请求

Joke基本项目构建2 网络请求

作者: _赖笔小新 | 来源:发表于2015-01-03 15:39 被阅读110次

网络请求封装在JKNetworkUtil类中。没有使用流行的AFNetworking,而是用NSURLConnection。

为了获取糗事百科的消息列表,我们需要得到对应的URL请求地址和参数。我直接从Joke-Swift copy过来。

最热列表

http://m2.qiushibaike.com/article/list/suggest?count=20&page=

最新列表

http://m2.qiushibaike.com/article/list/latest?count=20&page=

真相列表

http://m2.qiushibaike.com/article/list/imgrank?count=20&page=

有了地址我们就可以发出请求传,然后接收数据进行展示了

下面我们看看怎么发出请求

网络请求对应的类是NSURLRequest,实例化NSURLRequest需要一个URL类型。

实例化一个URL

NSURL * url = [[NSURL alloc]initWithString:[NSString stringWithFormat:@"%@%ld", @"http://m2.qiushibaike.com/article/list/suggest?count=20&page=", (long)pageNo]];

很简单,接着实例化NSURLRequest

NSURLRequest * request = [[NSURLRequest alloc]initWithURL:url];

接着试图发出请求,但是发现还需要一个NSOperationQueue。看它的定义

+ (void)sendAsynchronousRequest:(NSURLRequest*) request
                      queue:(NSOperationQueue*) queue
          completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler NS_AVAILABLE(10_7, 5_0);

这个参数跟异步有关,具体信息可以查看并发编程:API及挑战

那我们就实例化一个NSOperationQueue

NSOperationQueue * queue = [[NSOperationQueue alloc]init];

最后的请求是这样的:

[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
    
}];

completionHandler是一个block。用来处理请求结果。

if (connectionError) {
        if (failure) {
            dispatch_async(dispatch_get_main_queue(), ^{
                failure();
            });
            NSLog(@"connection error : %@", connectionError.localizedDescription);
        }
    }else {
        NSDictionary * jsonData = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
        
        if (success) {
            dispatch_async(dispatch_get_main_queue(), ^{
                success(jsonData);
            });
        }
        
    }

我首先判断是否有请求错误发生,如果connectionError不为空,那么就是发生了错误,调用failure这个block。failure是外部传进来的错误处理block。

else部分是成功的处理逻辑,我们把返回的数据:data进行json序列化,因为糗事百科服务器返回的就是json传。结果就是得到一个NSDictionary。同样的这边会调用success这个外部block来处理成功的情况。

可以发现在调用failure 和 success的时候都会用

dispatch_async(dispatch_get_main_queue(), ^{
            // failure 和 success
});

这是gcd写法,目的是把大括号内的代码放到主线程中执行。

具体可以clone我的项目自己试验,地址是GitHub

相关文章

  • Joke基本项目构建2 网络请求

    网络请求封装在JKNetworkUtil类中。没有使用流行的AFNetworking,而是用NSURLConnec...

  • Joke基本项目构建1

    这边介绍下项目的结构和作用 界面使用storyboard。在iOS设备屏幕百花齐放的时代,不用storyboard...

  • 贼好用的 AFN3.x 网络请求封装,支持HTTPS验证,多图上

    AFNetworking 我项目里面的网络请求是一外包大牛基于AFN2.x封装的基本网络请求,感觉其封装的贼好,对...

  • Joke基本项目构建3 添加缓存图片

    糗事百科的阅读方式跟微博很想,它是按时间线排布的。所以过几分钟刷新出来的内容会是全新的。那这种情况其实做缓存的意义...

  • Okhttp(Kotlin版)流程解读

    OkHttp是主流的网络请求框架,Android网络请求基本的项目封装也是有Rxjava+Retrofit+Okh...

  • iOS-HTTP网络框架

    前言 一.网络请求的构建 网络请求的构建很简单, 根据一个请求需要的条件如URL, 请求方式, 请求参数, 请求头...

  • OkHttp的使用

    1.Http网络请求基本知识2.OkHttp的基本使用3.Call模型 一.Http网络请求响应基本知识 简介 从...

  • 一步步封装实现自己的网络请求框架

    一、前言 现如今 Android 领域流行的网络请求框架基本都是用 Retrofit 加 RxJava 来搭配构建...

  • RSA加密

    最近在整理公司iOS项目,觉得目前的网络架构实在难修改,固决定重新构建一个网络请求库,因请求中经常用到加密,正好把...

  • 封装TCP请求框架

    目的:由于公司项目需求,现需实现一个基于TCP的网络请求框架。 功能:包含心跳机制、请求缓冲、请求回调、基本的网络...

网友评论

      本文标题:Joke基本项目构建2 网络请求

      本文链接:https://www.haomeiwen.com/subject/icwztttx.html