美文网首页
查询手机号码归属地 json 解析数据

查询手机号码归属地 json 解析数据

作者: 风影鹤 | 来源:发表于2018-10-24 13:41 被阅读0次

               首先创建控件   然后导入MB 文件夹 MBProgressHUD

                 导入头文件#import "MBProgressHUD/MBProgressHUD.h"  

                  创建类别文件 NSstring+regular

                   .h中填写方法:

    //判断是否是一个正确的手机号

    -(BOOL)isCorrectPhoneNumber;

                     .m 中实现方法:

    //判断是否是一个正确的手机号

    -(BOOL)isCorrectPhoneNumber{

        //如果不是11位 返回 NO

        if(self.length!=11) {

            returnNO;

        }

        //如果够11位, 如果以10 11 开头返回 YES

        if ([self hasPrefix:@"13"] || [self hasPrefix:@"14"] || [self hasPrefix:@"15"] || [self hasPrefix:@"16"] || [self hasPrefix:@"17"] || [self hasPrefix:@"18"] || [self hasPrefix:@"19"]) {

            returnYES;

        }

        //剩下的都判定错误

        return NO;

    }

       导入头文件#import "NSString+Regular.h"

                          控件拖入:

    @property (weak, nonatomic) IBOutlet UITextField *phoneTF;

    - (IBAction)search:(id)sender;

    @property (weak, nonatomic) IBOutlet UITextView *textVi;

    //显示提示框

    -(void)showMBAlertWithMassage:(NSString*)msg{

        MBProgressHUD *hud = [[MBProgressHUD alloc]initWithView:self.view];

        hud.mode = MBProgressHUDModeText;

        hud.removeFromSuperViewOnHide = YES;

        hud.labelText= msg;

        [self.viewaddSubview:hud];

        [hudshow:YES];

        [hudhide:YES afterDelay:2.0];

    }

    - (IBAction)search:(id)sender {

        if(self.phoneTF.text.length==0){

            [self showMBAlertWithMassage:@"手机号不可为空"];

            return;

        }

        //做手机号的判断

        if ([self.phoneTF.text isCorrectPhoneNumber] == NO) {

            [self showMBAlertWithMassage:@"请输入正确的手机号"];

            return;

        }

        //使用 GET 请求网络数据

       [self requestNetDataByGET];

        //使用 POST 请求网络数据

        [self requestNetDataByPOST];

    }

    //使用 GET 请求网络数据

    -(void)requestNetDataByGET{

        //显示等待显示器

        MBProgressHUD *hud = [[MBProgressHUD alloc]initWithView:self.view];

        hud.removeFromSuperViewOnHide = YES;

        [self.viewaddSubview:hud];

        [hudshow:YES];

        // (1)封装网址字符串 并把参数连接到字符串上

        NSString *URL = [NSString stringWithFormat:@"http://apis.juhe.cn/mobile/get?phone=%@&key=%@",self.phoneTF.text,@"74a36daf6c9af664e4ef26bbeaa9085c"];

        // (2) 将网址字符串封装为地址对象

        NSURL*url = [NSURLURLWithString:URL];

        // (3) 做一个请求对象 设置缓存策略和超市时长

        NSURLRequest *req = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:5.0];

        // (4)

        [self usesessionRequestData:req hud:hud];

    }

       POST方法

    -(void)requestNetDataByPOST{

        //显示等待显示器

        MBProgressHUD *hud = [[MBProgressHUD alloc]initWithView:self.view];

        hud.removeFromSuperViewOnHide = YES;

        [self.viewaddSubview:hud];

        [hudshow:YES];

        //将网址字符串封装为网址对象

        NSURL *url = [NSURL URLWithString:@"http://apis.juhe.cn/mobile/get"];

        //做一个请求对象

        NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:5.0];

        //设置请求方式魏 post

        [reqsetHTTPMethod:@"POST"];

        //将参数坐成一个字符串

        NSString *paramStr = [NSString stringWithFormat:@"phone=%@&key=%@",self.phoneTF.text,@"74a36daf6c9af664e4ef26bbeaa9085c"];

        //将参数字符串转换为二进制对象

        NSData *parmeData = [paramStr dataUsingEncoding:NSUTF8StringEncoding];

        //将参数二进制数据放在请求体中

        [reqsetHTTPBody:parmeData];

        [self usesessionRequestData:req hud:hud];

    }

    //请求网络数据

    -(void)usesessionRequestData:(NSURLRequest*)req hud:(MBProgressHUD*)hud{

        // (3)请求网络数据

        NSURLSession *session = [NSURLSession sharedSession];

        //(5)请求网络数据任务

        NSURLSessionDataTask*task = [sessiondataTaskWithRequest:reqcompletionHandler:^(NSData*_Nullabledata,NSURLResponse*_Nullableresponse,NSError*_Nullableerror) {

            //停掉等待指示器

            dispatch_async(dispatch_get_main_queue(), ^{

                [hudhide:YES];

            });

            //如果发生服务器错误

            if(error !=nil) {

                //回到 UI 主线程提示

                dispatch_async(dispatch_get_main_queue(), ^{

                    [self showMBAlertWithMassage:@"服务器错误"];

                });

                return;

            }

            //解析 JSON 数据

            NSError*jsonError =nil;

            id jsonData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&jsonError];

            //如果json解析错误 给出提示 并结束调用

            if(jsonError !=nil) {

                dispatch_async(dispatch_get_main_queue(), ^{

                    [self showMBAlertWithMassage:@"网络数据错误"];

                });

                return;

            }

            //json 解析正确 得到resultcode字段的值不是200 发生错误 给客户提示

            if([[jsonDataobjectForKey:@"resultcode"]intValue] !=200) {

                //获取reason

                NSString*reason = jsonData[@"reason"];

                dispatch_async(dispatch_get_main_queue(), ^{

                    [selfshowMBAlertWithMassage:reason];

                });

                return;

            }

            //没有错误 提取归属地信息

            NSDictionary*resultDic = jsonData[@"result"];

            NSString*province = resultDic[@"province"];

            NSString*city = resultDic[@"city"];

            NSString*areacode = resultDic[@"areacode"];

            NSString*zip = resultDic[@"zip"];

            NSString*company = resultDic[@"company"];

            NSString*card = resultDic[@"card"];

            //用一个字符串拼接到一块

            NSString*resultStr = [NSStringstringWithFormat:@"省:%@\n\

                                   市:%@\n\

                                   区号:%@\n\

                                   邮编:%@\n\

                                   公司:%@\n\

                                   类型:%@",province,city,areacode,zip,company,card];

            dispatch_async(dispatch_get_main_queue(), ^{

                self.textVi.text= resultStr;

            });

        }];

        [taskresume];

    }

    最后 :info.plist 中开启网络

    App Transport Security Settings

    Allow Arbitrary Loads   后面跟 YES.

    相关文章

      网友评论

          本文标题:查询手机号码归属地 json 解析数据

          本文链接:https://www.haomeiwen.com/subject/kngttqtx.html