[IOS]如何使用AFNetwork,并获得.txt的值

1. 根据上篇文章,先安装好AFNetwork

 

2. 如果url里面是.txt这类的,会报错:

”Request failed: unacceptable content-type: text/plain” 错误

 有2个方法:

一. 修改源码, 在AFN的AFURLResponseSerialization.m文件中,修改init方法中。

self.acceptableContentTypes = [NSSet setWithObjects: @"application/json", @"text/json", @"text/javascript", nil];

 

二.不修改源码:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];

 

参考: https://blog.csdn.net/msn465780/article/details/76599782

 

3.错误:关于JSON text did not start with array or object and option to allow fragments not set 错误

这是因为 AFNetworking默认把响应结果当成json来处理,(默认manager.responseSerializer = [AFJSONResponseSerializer serializer]) ,很显然,我们请求的百度首页 返回的并不是一个json文本,而是一个html网页,但是AFNetworking并不知道,它坚信请求的结果就是一个json文本!然后固执地以json的形式去解析,显然没办法把一个网页解析成一个字典或者数组,所以产生了上述错误.

 

然而,我们期望它能够正确地处理这个情形,而不是提示一个错误. 
这时候 你必须告诉AFNetworking:别把这个网页当json来处理! 
只需要在发送请求前加入:

manager.responseSerializer = [AFHTTPResponseSerializer serializer]

 

参考:https://www.cnblogs.com/akiha/p/5775729.html

 

4.使用方法:

NSLog(@"AFNetworking start.......");
    
    [self AFNetworkStatus];
    
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    NSString *url = @"your url path";
    
    [manager GET:url parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
        
    }
         success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        NSLog(@"AFNetworking 请求成功:%@",responseObject);
        NSString *result = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSLog(@"AFNetworking result: %@",result);
        [self 跳转方法];
        
    }
         failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull   error) {
        
        NSLog(@"AFNetworking 请求失败:%@",error);
        [self 跳转方法];
    }];

}

***注意:if(!responseObject) {}要加入这个判断,没有这个判断,即使没有网络,你获得的结果也是success的

failure不是没有网络的判断,应该是AFNetworking的异常捕获才到这里

以上看法是错误的,我可以确定是手机无网络了,而且变量也没有缓存,那为什么断网后仍然可以获取url的值呢,百思不得其解.我把app删了后重新跑一次,发现又可以判断无网络了,但是只能初装的第一次能判断是否有网络,之后还是不能判断.那只能在上面包一层网络判断了.

补充:

可以加上AFN的网络状态判断:

开启监听

[[AFNetworkReachabilityManager sharedManager] startMonitoring];

    

判断网络链接状态

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

        switch (status) {

            case AFNetworkReachabilityStatusNotReachable:{

                NSLog(@"无网络");

                break;

            }

            case AFNetworkReachabilityStatusReachableViaWiFi:{

                NSLog(@"WiFi网络");

                break;

            }

            case AFNetworkReachabilityStatusReachableViaWWAN:{

                NSLog(@"3G网络");

                break;

            }

            default:

                break;

        }

    }];

 

 

其他使用方法参考:

https://blog.csdn.net/twier_/article/details/86711245

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值