美文网首页
AFNetworking 3.1使用方法

AFNetworking 3.1使用方法

作者: cd28adedf8f6 | 来源:发表于2016-07-20 20:57 被阅读349次

    #import "HttpsManager.h"

    @implementationHttpsManager

    #pragma mark - 创建请求者

    +(AFHTTPSessionManager*)manager

    {

    AFHTTPSessionManager*manager = [AFHTTPSessionManagermanager];

    // 超时时间

    manager.requestSerializer.timeoutInterval= kTimeOutInterval;

    // 声明上传的是json格式的参数,需要你和后台约定好,不然会出现后台无法获取到你上传的参数问题

    manager.requestSerializer= [AFHTTPRequestSerializerserializer];// 上传普通格式

    //    manager.requestSerializer = [AFJSONRequestSerializer serializer]; // 上传JSON格式

    // 声明获取到的数据格式

    manager.responseSerializer= [AFHTTPResponseSerializerserializer];// AFN不会解析,数据是data,需要自己解析

    //    manager.responseSerializer = [AFJSONResponseSerializer serializer]; // AFN会JSON解析返回的数据

    // 个人建议还是自己解析的比较好,有时接口返回的数据不合格会报3840错误,大致是AFN无法解析返回来的数据

    returnmanager;

    }

    + (void)getUserCarShopAndSalesDataForSalesWithUserId:(NSString*)userIddate:(NSString*)dateselectAreaType:(NSString*)areaTypeSuccess:(SuccessBlock)successfail:(AFNErrorBlock)fail

    {

    // get请求也可以直接将参数放在字典里,AFN会自己讲参数拼接在url的后面,不需要自己凭借

    NSDictionary*param = @{@"user_id":userId,@"sale_date":date,@"accessToken":@"e9c0e60318ebd07ec2fe",@"area_type":areaType};

    // 创建请求类

    AFHTTPSessionManager*manager = [selfmanager];

    [managerGET:@"http://pm.yunhan-china.com/index.php/Api_sale/sales_get"parameters:paramprogress:^(NSProgress* _Nonnull downloadProgress) {

    // 这里可以获取到目前数据请求的进度

    }success:^(NSURLSessionDataTask* _Nonnull task,id_Nullable responseObject) {

    // 请求成功

    if(responseObject){

    NSDictionary*dict = [NSJSONSerializationJSONObjectWithData:responseObjectoptions:NSJSONReadingMutableContainerserror:nil];

    success(dict,YES);

    }else{

    success(@{@"msg":@"暂无数据"},NO);

    }

    }failure:^(NSURLSessionDataTask* _Nullable task,NSError* _Nonnull error) {

    // 请求失败

    fail(error);

    }];

    }

    + (void)loginWithUserAccount:(NSString*)accountpassword:(NSString*)passwordsuccess:(SuccessBlock)successfail:(AFNErrorBlock)fail

    {

    // 将请求参数放在请求的字典里

    NSDictionary*param = @{@"phoneNumber":account,@"password":@"f379eaf3c831b04de153469d1bec345e"};

    // 创建请求类

    AFHTTPSessionManager*manager = [selfmanager];

    [managerPOST:@"http://pm.yunhan-china.com/index.php/api_common/login"

    parameters:param

    progress:^(NSProgress* _Nonnull uploadProgress) {

    // 这里可以获取到目前数据请求的进度

    }success:^(NSURLSessionDataTask* _Nonnull task,id_Nullable responseObject) {

    // 请求成功

    if(responseObject){

    NSDictionary*dict = [NSJSONSerializationJSONObjectWithData:responseObjectoptions:NSJSONReadingMutableContainerserror:nil];

    success(dict,YES);

    }else{

    success(@{@"msg":@"暂无数据"},NO);

    }

    }failure:^(NSURLSessionDataTask* _Nullable task,NSError* _Nonnull error) {

    // 请求失败

    fail(error);

    }];

    }

    - (void)downLoadWithUrlString:(NSString*)urlString

    {

    // 1.创建管理者对象

    AFHTTPSessionManager*manager = [AFHTTPSessionManagermanager];

    // 2.设置请求的URL地址

    NSURL*url = [NSURLURLWithString:urlString];

    // 3.创建请求对象

    NSURLRequest*request = [NSURLRequestrequestWithURL:url];

    // 4.下载任务

    NSURLSessionDownloadTask*task = [managerdownloadTaskWithRequest:requestprogress:^(NSProgress* _Nonnull downloadProgress) {

    // 下载进度

    NSLog(@"当前下载进度为:%lf",1.0* downloadProgress.completedUnitCount/ downloadProgress.totalUnitCount);

    }destination:^NSURL* _Nonnull(NSURL* _Nonnull targetPath,NSURLResponse* _Nonnull response) {

    // 下载地址

    NSLog(@"默认下载地址%@",targetPath);

    // 设置下载路径,通过沙盒获取缓存地址,最后返回NSURL对象

    NSString*filePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask,YES)lastObject];

    return[NSURLfileURLWithPath:filePath];// 返回的是文件存放在本地沙盒的地址

    }completionHandler:^(NSURLResponse* _Nonnull response,NSURL* _Nullable filePath,NSError* _Nullable error) {

    // 下载完成调用的方法

    NSLog(@"%@---%@", response, filePath);

    }];

    // 5.启动下载任务

    [taskresume];

    }

    - (void)uploadWithUser:(NSString*)userIdUrlString:(NSString*)urlStringupImg:(UIImage*)upImg

    {

    // 创建管理者对象

    AFHTTPSessionManager*manager = [AFHTTPSessionManagermanager];

    // 参数

    NSDictionary*param = @{@"user_id":userId};

    [managerPOST:urlStringparameters:paramconstructingBodyWithBlock:^(id  _Nonnull formData) {

    /******** 1.上传已经获取到的img *******/

    // 把图片转换成data

    NSData*data = UIImagePNGRepresentation(upImg);

    // 拼接数据到请求题中

    [formDataappendPartWithFileData:dataname:@"file"fileName:@"123.png"mimeType:@"image/png"];

    /******** 2.通过路径上传沙盒或系统相册里的图片 *****/

    //        [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"文件地址"] name:@"file" fileName:@"1234.png" mimeType:@"application/octet-stream" error:nil];

    }progress:^(NSProgress* _Nonnull uploadProgress) {

    // 打印上传进度

    NSLog(@"%lf",1.0*uploadProgress.completedUnitCount/ uploadProgress.totalUnitCount);

    }success:^(NSURLSessionDataTask* _Nonnull task,id_Nullable responseObject) {

    //请求成功

    NSLog(@"请求成功:%@",responseObject);

    }failure:^(NSURLSessionDataTask* _Nullable task,NSError* _Nonnull error) {

    //请求失败

    NSLog(@"请求失败:%@",error);

    }];

    }

    - (void)AFNetworkStatus{

    //1.创建网络监测者

    AFNetworkReachabilityManager*manager = [AFNetworkReachabilityManagersharedManager];

    /*枚举里面四个状态  分别对应 未知 无网络 数据 WiFi

    typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {

    AFNetworkReachabilityStatusUnknown          = -1,      未知

    AFNetworkReachabilityStatusNotReachable     = 0,       无网络

    AFNetworkReachabilityStatusReachableViaWWAN = 1,       蜂窝数据网络

    AFNetworkReachabilityStatusReachableViaWiFi = 2,       WiFi

    };

    */

    [managersetReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

    //这里是监测到网络改变的block  可以写成switch方便

    //在里面可以随便写事件

    switch(status) {

    caseAFNetworkReachabilityStatusUnknown:

    NSLog(@"未知网络状态");

    break;

    caseAFNetworkReachabilityStatusNotReachable:

    NSLog(@"无网络");

    break;

    caseAFNetworkReachabilityStatusReachableViaWWAN:

    NSLog(@"蜂窝数据网");

    break;

    caseAFNetworkReachabilityStatusReachableViaWiFi:

    NSLog(@"WiFi网络");

    break;

    default:

    break;

    }

    }] ;

    }

    @end

    相关文章

      网友评论

          本文标题:AFNetworking 3.1使用方法

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