首页 > 代码库 > 移动开发在路上-- IOS移动开发系列 网络交互四(2)

移动开发在路上-- IOS移动开发系列 网络交互四(2)

接着上次的讲,这次我们讲 网络请求的封装  打开创建的项目,让我们一起来继续完成他,

首先我们来创建一个NSobject 的文件

圈住出来的轻一点要注意。千万不要搞错了

创建好之后,开始编写代码,

我们第一不要要先把工程文件引用进来

看图

让后我们定义一下接口  和 一个block

//block定义
typedef void(^RequestFinishBlock)(id result);

 

1 @interface ZWJDataService : NSObject
2 
3 //定义接口
4 +(ASIHTTPRequest *)requestWithURL:(NSString *)urlstring
5                            params:(NSMutableDictionary *)params
6                        httpMethod:(NSString *)httpMethod
7                     completeBlock:(RequestFinishBlock)block;
8 
9 @end

 

上图片

 

打开.m文件

补充说明一下 由于我们这里网络数据是用json格式的所以要解析json还要引用第三方的库,

JSONKit

先导入 JSONkit.h JSONKit.m 两个文件

cocoa 下json开源的类库有很多,其中JSONKit库是非常简单易用而且效率又比较高的。

想要使用JSONKit库来解析json文件,只需要下载JSONKit.h 和JSONKit.m添加到工程中(下载链接);然后加入libz.dylib即可

在扩展一下 讲一下使用方法

1.将json转换为NSDictionary

NSString *string = @"{\"name\": \"My Name\",\"list\": [\"one\",\"two\",\"three\"]}";  
     
NSData* jsonData = http://www.mamicode.com/[string dataUsingEncoding:NSUTF8StringEncoding];  
     
NSDictionary *resultsDictionary = [jsonData objectFromJSONData]; 

2.将NSDictionary转换为 json格式的string

//resultsDic是需要转换的Dictionary  
NSString *string = [[NSString alloc] initWithData:[resultsDic JSONData] encoding:NSUTF8StringEncoding]; 

下面继续回归主题

实现.h文件当中定义的接口

+(ASIHTTPRequest *)requestWithURL:(NSString *)urlstring
                           params:(NSMutableDictionary *)params
                       httpMethod:(NSString *)httpMethod
                    completeBlock:(RequestFinishBlock)block{

}

这个方法的参数我不做注释我想大家根据单词的意思也能大概了解到。之前英语没学好,现在边学习编程还要辅助学习English。。。

 

下边我们还要做一件定义一个宏基地址

意思就是说我们要访问接口肯定要用到url,那么url里边肯定会有主机地址跟接口的主入口是不变的,边的东西需要我们动态的去加载、变更。

 

#define BASE_URL @"http://**********/api/"

在这里我的测试地址就不做显示了,大家也可以根据自己的不同的需求来定义自己的接口主体

我这里的url是分为

主体部分 + token + 其他参数 组合而成的

其他参数:我们在接口中已经定义过了他是 NSMutableDictionary  类型的 ,在C#里边是Dictionary键值对字典

params:(NSMutableDictionary *)params

在这里我们必须得遵守oc中的守则才进行参数的命名定义;

 

拼接URL字符串

//拼接URL字符串
    urlstring=[BASE_URL stringByAppendingFormat:@"%@?access_token=aa",urlstring];
    
    NSLog(@"urlStr : %@ ",urlstring);

拼接完成以后,我们为了验证是否正确在打印一下,看一下输出的跟我们接口要的链接是否一致相对应;

接下来,我们要判断请求方式 是GET  还是 POST 

我们这里用的是caseInsensitiveCompare ,所以在这里只讲一下caseInsensitiveCompare

NSString *astring01 = @"GET";  
NSString *astring02 = @"get";      
BOOL result = [astring01 compare:astring02] = = NSOrderedSame;      
NSLog(@"result:%d",result);      
//NSOrderedSame判断两者内容是否相同  忽略大小写

 

下边就该进行GET请求字符串的拼接了;

//处理GET请求的参数
    NSComparisonResult comparRet1=[httpMethod caseInsensitiveCompare:@"GET"];
    if(comparRet1==NSOrderedSame){
        NSMutableString *paramsString=[NSMutableString string];
        NSArray *allkeys=[params allKeys];
        NSLog(@"parms : %@ \r\n",params);
        for (int i=0; i<params.count; i++) {
            NSString *key=[allkeys objectAtIndex:i];
            id value=http://www.mamicode.com/[params objectForKey:key];
            
            [paramsString appendFormat:@"%@=%@",key,value];
            
            if (i<params.count-1) {
                [paramsString appendFormat:@"&"];
            }
            NSLog(@"paramsString : %@ ",paramsString);
            
        }
        
        if (paramsString.length>0) {
            urlstring=[urlstring stringByAppendingFormat:@"&%@",paramsString];
        }
    }
    NSURL *url=[NSURL URLWithString:urlstring];
    
    NSLog(@"URL : %@ ",url);

完成以后在打印一下 检查一下字符串是否正确

 

 

今天先讲到这里,该睡觉了,谢谢大家对我的支持,关注!

如果觉得有用的话,别忘了推荐一下哦,共同学习,共同进步!

 

作者:zhangwenjian
出处:http://www.cnblogs.com/zhangwenjian
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。