美文网首页
iOS数据请求超时处理

iOS数据请求超时处理

作者: 远方的枸杞 | 来源:发表于2017-08-14 20:43 被阅读0次

前言

在网络情况不好时,afnet库请求的默认超时时间过长,为了提高用户体验,我们可以自己设置请求超时时间,并在超时后取消当前请求队列。

实现思路

1.在自己封装的数据请求单利类中设置合适的请求超时时间;

 [qlmanager.SessionManager.requestSerializer setTimeoutInterval:10];

2.请求超时后,会调用请求失败的回调,在回调方法中判断错误码为-1001 时 进行超时提示以及取消当前请求任务

failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)
    {
        if (error.code == -1001)
        {
            [ql_hud_manager showInfoWithStatus:@"连接超时"];
            [ql_hud_manager dismissWithDelay:2];
            [task cancel];
            handle(nil,error,0);
        }

具体代码


#import "ql_http_manager.h"
#import "AFHTTPSessionManager.h"
@interface ql_http_manager()
@property(nonatomic,strong) AFHTTPSessionManager * SessionManager;
@end
@implementation ql_http_manager
static ql_http_manager * qlmanager = nil;
+ (instancetype)share_ql_http_manager
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        if (!qlmanager)
        {
            qlmanager = [[ql_http_manager alloc]init];
        }
    });
    return qlmanager;
}

- (instancetype)init
{
    if ((qlmanager = [super  init]))
    {
        qlmanager.SessionManager = [AFHTTPSessionManager manager];
        qlmanager.SessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
        qlmanager.SessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
        [qlmanager.SessionManager.requestSerializer setTimeoutInterval:10];
    }
    return qlmanager;
}

+ (void)post_with_Url:(NSString *)url and_param:(NSDictionary *)param and_log:(NSString*)log and_handle:(SucBlock)handle
{
    [self share_ql_http_manager];
    [ql_hud_manager showWithStatus:log];
    [qlmanager.SessionManager POST:url parameters:param progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject)
    {
        NSDictionary * data = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
        if ([data[@"status"] isEqualToString:@"200"])
        {
            [ql_hud_manager dismiss];
            handle(data,nil,0);
        }else if ([data[@"status"] isEqualToString:@"500"])
        {
            [ql_hud_manager showInfoWithStatus:@"服务器程序异常"];
            handle(data,nil,1);
        }else if ([data[@"status"] isEqualToString:@"400"])
        {
            [ql_hud_manager showInfoWithStatus:@"请求参数结构错误"];
            handle(data,nil,1);
        }else if ([data[@"status"] isEqualToString:@"404"])
        {
            [ql_hud_manager showInfoWithStatus:@"用户不存在"];
             handle(data,nil,1);
        }else if ([data[@"status"] isEqualToString:@"405"])
        {
            [ql_hud_manager showInfoWithStatus:@"密码错误"];
             handle(data,nil,1);
        }else if ([data[@"status"] isEqualToString:@"406"])
        {
            [ql_hud_manager showInfoWithStatus:@"接口非法访问"];
            handle(data,nil,1);
        }else if ([data[@"status"] isEqualToString:@"407"])
        {
            [ql_hud_manager showInfoWithStatus:@"数据库数据异常"];
            handle(data,nil,1);
        }
        NSLog(@"%@ %s 第%d行 %@",log,__func__,__LINE__,data[@"message"]);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)
    {
        if (error.code == -1001)
        {
            [ql_hud_manager showInfoWithStatus:@"连接超时"];
            [ql_hud_manager dismissWithDelay:2];
            [task cancel];
            handle(nil,error,0);
        }
        else
        {
            handle(nil,error,0);
            [ql_hud_manager showInfoWithStatus:@"无法连接服务器"];
            NSLog(@"%s 第%d行 %@",__func__,__LINE__,error.description);

        }
    }];
}
@end

相关文章

  • iOS数据请求超时处理

    前言 在网络情况不好时,afnet库请求的默认超时时间过长,为了提高用户体验,我们可以自己设置请求超时时间,并在超...

  • win+r cmd ping 请求超时 请求超时 请求超时 请求超时 数据包 已发送 =4 已接受 =0 丢...

  • 检测网络请求超时

    问题:小程序设置超时后,有时网络不好请求不到数据,页面空白。怎么检测网络超时,对空白页面及时作出处理,提升用户体验...

  • iOS HTTPS SSL

    iOS https 目前iOS大都是用的AFN来进行数据请求 正常请求 配置 逻辑处理 主要使用是在 AFUR...

  • uniapp请求超时处理

    一、manifest.json里面可以设置请求超时的时间,networkTimeout 这里是官方文档['http...

  • rn请求超时处理

    https://segmentfault.com/a/1190000021322450[https://segme...

  • 小程序总结(十七)-请求超时处理

    小程序如何处理固定时间(比如10s)内没有返回接口数据,就处理为请求超时? 1、在app.json文件中设置 2、...

  • 一行代码完成iOS网络请求

    在iOS项目中经常使用http请求,每个http请求都需要配置path,请求参数,请求头,处理返回的数据。 一个h...

  • go-context笔记

    WHY 每一个长请求都应该有个超时限制需要在调用中传递这个超时比如开始处理请求的时候我们说是 3 秒钟超时那么在函...

  • iOS面试题-第十页

    91.App需要加载大量数据,给服务器发送请求,但是服务器卡住了怎么办? 设置请求超时,给用户提示请求超时,根据用...

网友评论

      本文标题:iOS数据请求超时处理

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