iOS 网络解析 -- 简单的JSON解析(包含AFNetworking、MJExtension的简单实用)

来源:互联网 发布:安卓电视直播软件 知乎 编辑:程序博客网 时间:2024/06/07 03:33

      对于现在互联网时代来说,一个没有网络请求的应用通常是没有生命的,现在的应用,几乎所有的应用都需要用到网络编程,比如美团、大众点评】嘀嘀打车、微信;只有通过网络跟外界进行数据交互、数据更新,应用才能保持新鲜、更能持久;如果没有了网络,也就缺少了数据变化,无论外观多么华丽,终将会被淘汰。、

      此程序涉及到的知识点:

        (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);    }];}


button按钮的点击事件

#pragma mark =========== 确定按钮的点击事件 ===========- (IBAction)sureOnClick:(UIButton *)sender{    // URLHostAllowedCharacterSet : 返回一个字符集包含在URL的主机部分允许的字符。    NSString *mStr1 = [self.textField.text stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];        // 重新获取数据    [self sendPostRequest:mStr1];        // 让文本框退出编辑    [self.textField endEditing:YES];}






        

0 0