对于现在互联网时代来说,一个没有网络请求的应用通常是没有生命的,现在的应用,几乎所有的应用都需要用到网络编程,比如美团、大众点评】嘀嘀打车、微信;只有通过网络跟外界进行数据交互、数据更新,应用才能保持新鲜、更能持久;如果没有了网络,也就缺少了数据变化,无论外观多么华丽,终将会被淘汰。、
此程序涉及到的知识点:
(1)AFNetworking、MJExtension库的使用
(2)基类的使用(其实就是继承)
(3)MVC模式
(4)封装网络请求
下图是效果图(适配所有屏幕)
首先是封装网络请求
很多时候网络请求会使用第三方框架,AFNetworking、ASIHTTPRequest,在一个项目中到处都要用到网络请求,使用第三方框架有很强的依赖性,如果别人的库一更新我们也要跟着更新,维护起来的时候麻烦,所以一般会自己先封装网络请求,当更新的时候, 只要更新这一处就行了。
声明
// 封装网络请求
#import <Foundation/Foundation.h>
@interface SeptNetWorkTool : NSObject
// url 请求的url params: 请求的参数
+ (void)POST:(NSString *)url params:(NSDictionary *)params success:(void (^)(id responseObj))success failure:(void (^)(NSError *error))failure;
@end
#import "SeptNetWorkTool.h"
#import "AFNetworking.h"
@implementation SeptNetWorkTool
+ (void)POST:(NSString *)url params:(NSDictionary *)params
success:(void (^)(id responseObj))success
failure:(void (^)(NSError *error))failure
{
// 1.获取请求管理者
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
// 2.发生POST请求
// 2.发送POST请求
[manager POST:url parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObj) {
if (success) {
success(responseObj);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(error);
}
}];
}
@end
- (void)sendPostRequest:(NSString *)text // test是输入框中的text
{
NSString *mStrURL = [NSString string];
// 这里仅仅是为了第一次运行程序显示有数据(无实际意义)
if (text == nil) {
mStrURL = [NSString stringWithFormat:@"%@", TestUrl];
}else {
mStrURL = [NSString stringWithFormat:URLSTR, APPKEY, text];
}
// 封装请求参数
NSMutableArray *mArray = [NSMutableArray array];
[SeptNetWorkTool POST:mStrURL params:nil success:^(id responseObj) {
NSDictionary *dataDict = responseObj[@"result"];
for (NSDictionary *dict in dataDict[@"data"]) {
// 没有使用MJExtension框架
AFCaipuData *mAFdata = [[AFCaipuData alloc] initWithDictionary:dict];
// 使用了MJExtension框架(其实在这里看不出使用MJExtension的方便,因为代码都是一句,这个只能在数据模型中才能看出方便 PS:数据模型AFCaipuData)
MJCaipuData *mMJdata = [MJCaipuData objectWithKeyValues:dict];
[mArray addObject:mMJdata];
}
_caipuArray = mArray;
[self.tabView reloadData];
} failure:^(NSError *error) {
NSLog(@"----error -- %@", error);
}];
}
#pragma mark =========== 确定按钮的点击事件 ===========
- (IBAction)sureOnClick:(UIButton *)sender
{
// URLHostAllowedCharacterSet : 返回一个字符集包含在URL的主机部分允许的字符。
NSString *mStr1 = [self.textField.text stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];
// 重新获取数据
[self sendPostRequest:mStr1];
// 让文本框退出编辑
[self.textField endEditing:YES];
}