LXNetworking
网络层封装,基于AFNetworking 3.0
Demo地址https://github.com/xinge1/LXNetworking
大家如果有什么建议或意见可以直接联系我。
实现的功能
- get请求
- post请求
- 图片上传
- 文件下载
- 网络状况检测
- HUD显示(使用的MBProgressHUD,不喜欢的可以自己去掉)
下载方法的效果图
使用方法
/**
* 开启网络监测
*/
+ (void)startMonitoring;
/**
* get请求方法,block回调
*
* @param url 请求连接,根路径
* @param params 参数
* @param success 请求成功返回数据
* @param fail 请求失败
* @param showHUD 是否显示HUD
*/
+(LXURLSessionTask *)getWithUrl:(NSString *)url
params:(NSDictionary *)params
success:(LXResponseSuccess)success
fail:(LXResponseFail)fail
showHUD:(BOOL)showHUD;
/**
* post请求方法,block回调
*
* @param url 请求连接,根路径
* @param params 参数
* @param success 请求成功返回数据
* @param fail 请求失败
* @param showHUD 是否显示HUD
*/
+(LXURLSessionTask *)postWithUrl:(NSString *)url
params:(NSDictionary *)params
success:(LXResponseSuccess)success
fail:(LXResponseFail)fail
showHUD:(BOOL)showHUD;
/**
* 上传图片方法
*
* @param image 上传的图片
* @param url 请求连接,根路径
* @param filename 图片的名称(如果不传则以当时间命名)
* @param name 上传图片时填写的图片对应的参数
* @param params 参数
* @param progress 上传进度
* @param success 请求成功返回数据
* @param fail 请求失败
* @param showHUD 是否显示HUD
*/
+ (LXURLSessionTask *)uploadWithImage:(UIImage *)image
url:(NSString *)url
filename:(NSString *)filename
name:(NSString *)name
params:(NSDictionary *)params
progress:(LXUploadProgress)progress
success:(LXResponseSuccess)success
fail:(LXResponseFail)fail
showHUD:(BOOL)showHUD;
/**
* 下载文件方法
*
* @param url 下载地址
* @param saveToPath 文件保存的路径,如果不传则保存到Documents目录下,以文件本来的名字命名
* @param progressBlock 下载进度回调
* @param success 下载完成
* @param fail 失败
* @param showHUD 是否显示HUD
* @return 返回请求任务对象,便于操作
*/
+ (LXURLSessionTask *)downloadWithUrl:(NSString *)url
saveToPath:(NSString *)saveToPath
progress:(LXDownloadProgress )progressBlock
success:(LXResponseSuccess )success
failure:(LXResponseFail )fail
showHUD:(BOOL)showHUD;
遇到的坑
- 在AFNetworking的下载方法里面需要return一个url路径,如果把路径直接用
[NSURL URLWithString:saveToPath];
返回则在相应的路径下找不到下载的文件,所以最好使用[NSURL fileURLWithPath:saveToPath];
方法返回。
URLWithString
只是把路径转成NSURL
类型。
fileURLWithPath
是将字符串路径转成文件路径。
(不知道这么解释对不对,有更好的解释吗)
建议
-
不建议在viewControl里面直接调用以上这些接口请求网络,建议在这个网络封装之上根据具体业务再封装一层。这样封装成离散型网络层架构比较好。
网友评论
这句无效,sessionTask是nil,[self tasks]数组个数一直增加什么原因??
NSURL *url = [[NSURL alloc ]initWithString:str];
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:
caseId,@"caseId",
type,@"type",
userId,@"userId",nil];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [[AFJSONResponseSerializer alloc] init];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/atom+xml"];
[manager POST:[url absoluteString] parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
for(UIImage* image in images){
NSData *data = UIImagePNGRepresentation(image);
//fileName,mimeType
[formData appendPartWithFileData:data name:@"img" fileName:@"image.png" mimeType:@"image/png"];
}
} /*progress:uploadProgress*/ success:success failure:failure];
可能对你有帮助