美文网首页
网络请求(接口)

网络请求(接口)

作者: Liuny | 来源:发表于2018-12-15 17:52 被阅读0次

项目里网络请求是必不可少的,框架使用的是AFNetworking三方库。在其基础上做了一层封装,你使用到的是JMRequestManager,这是一个单例。其主要三个方法GET、POST、upload

第一步:在JMHttpUrl.h定义接口的地址,如下:

#define kUrlLogin fPinUrl(@"api/account/login")//登录

第二步:就是调用接口啦

post请求示例:

    NSMutableDictionary *params = [JMCommonMethod baseRequestParams];
    [params setJsonValue:phone key:@"mobile"];
    [params setJsonValue:code key:@"code"];
    [params setJsonValue:password key:@"password"];
    
    [self showLoading];
    [[JMRequestManager sharedManager] POST: kUrlLogin parameters:params completion:^(JMBaseResponse *response) {
        [self dismissLoading];
        if(response.error){
            //失败,response.errorMsg就是失败提示语
            [JMProgressHelper toastInWindowWithMessage:response.errorMsg];
        }else{
            //成功,response.responseObject就是接口返回的字典
        }
    }];

upload请求示例:

  1. 图片
    NSMutableDictionary *params = [JMCommonMethod baseRequestParams];
    [params setJsonValue:self.jubaoId key:@"byId"];
    NSString *text = self.inputTextView.text;
    [params setJsonValue:text key:@"content"];
    NSString *contact = self.inputContactTextField.text;
    [params setJsonValue:contact key:@"contact"];
    [self showLoading];
    [[JMRequestManager sharedManager] upload:kUrlJubao parameters:params formDataBlock:^NSDictionary<NSData *,JMDataName *> *(id<AFMultipartFormData> formData, NSMutableDictionary<NSData *,JMDataName *> *needFillDataDict) {
        for(int i=0;i<self.pictureData.count;i++){
            UIImage *image = self.pictureData[i];
            needFillDataDict[UIImageJPEGRepresentation(image, 0.3)] = [NSString stringWithFormat:@"image%d_image.jpg",(i+1)];
        }
        return needFillDataDict;
    } progress:nil completion:^(JMBaseResponse *response) {
        [self dismissLoading];
        if(response.error){
            [JMProgressHelper toastInWindowWithMessage:response.errorMsg];
        }else{
            [JMProgressHelper toastInWindowWithMessage:response.responseObject[@"desc"]];
            [self.navigationController popViewControllerAnimated:YES];
        }
    }];

注意
needFillDataDict[UIImageJPEGRepresentation(image, 0.3)] = [NSString stringWithFormat:@"image%d_image.jpg",(i+1)];
这个地方的image%d_image.jpg前面是接口的key,后面是这张图片的名称。

  1. 视频
    NSMutableDictionary *params = [JMCommonMethod baseRequestParams];
    [params setJsonValue:[NSString stringWithFormat:@"%d",price.intValue] key:@"price"];
    [self showLoading];
    
    //视频压缩
    JMUploadVideoTool *videoTool = [[JMUploadVideoTool alloc] init];
    [videoTool compressVideoWithInputURL:self.videoUrl successBlock:^(NSURL *outUrl) {
        //压缩成功
        [[JMRequestManager sharedManager] upload:kUrlUpMai parameters:params formDataBlock:^NSDictionary<NSData *,JMDataName *> *(id<AFMultipartFormData> formData, NSMutableDictionary<NSData *,JMDataName *> *needFillDataDict) {
            needFillDataDict[UIImageJPEGRepresentation(self.selectImage, 0.3)] = @"img_image.jpg";
            NSData *videoData = [NSData dataWithContentsOfURL:outUrl];
            needFillDataDict[videoData] = @"video_video.mp4";
            return needFillDataDict;
        } progress:nil completion:^(JMBaseResponse *response) {
            [self dismissLoading];
            if(response.error){
                [JMProgressHelper toastInWindowWithMessage:response.errorMsg];
            }else{
                //移除本地视频
                [JMFileManagerHelper removeItemAtPath:[outUrl path]];
                [JMFileManagerHelper removeItemAtPath:[self.videoUrl path]];
                [UIAlertController jm_showAlertWithTitle:@"上麦成功" message:@"若有用户请求上麦时,您将会接到通知" appearanceProcess:^(JXTAlertController * _Nonnull alertMaker) {
                    alertMaker.addActionCancelTitle(@"确定");
                } actionsBlock:^(NSInteger buttonIndex, UIAlertAction * _Nonnull action, JXTAlertController * _Nonnull alertSelf) {
                    [self.navigationController popViewControllerAnimated:YES];
                }];
            }
        }];
    } failBlock:^(NSString *errorMsg) {
        //压缩失败
        [self dismissLoading];
        [JMProgressHelper toastInWindowWithMessage:errorMsg];
    }];

这里结合了视频压缩工具一起使用,且是图片+视频一起上传。

结语:讲解的比较佛系,大家不懂的地方直接问我。文章上可以优化的地方,大家也多提建议。

相关文章

  • Retrofit 基础篇

    一、Retrofit 网络请求接口的注解类型:网络请求方法、标记类、网络请求参数 (1)网络请求方法 (2)标记类...

  • 网络请求(接口)

    项目里网络请求是必不可少的,框架使用的是AFNetworking三方库。在其基础上做了一层封装,你使用到的是JMR...

  • 小程序请求API接口,网络请求封装

    概述 前几日关注的用户问我有没有封装好的小程序网络请求接口,那么小程序请求API接口,网络请求封装,我们应该怎么编...

  • 各种网络错误

    1、网络错误[ 0 ] Network Error 异常的网络错误,首先查看后端请求接口,如果请求列表出现了该接口...

  • retrofit 由浅入深(三)源码解析

    源码理解主要从这几个方面 解析网络请求接口的注解配置网络请求参数 动态代理 生成 网络请求对象 网络请求适配器 将...

  • Android16-网络请求的封装

    1. 封装HttpURLConnection的网络请求 首先定义一个接口作为网络请求结果的回调 然后封装网络请求的...

  • Android App异常处理笔记

    请求网络接口时使用RxJava进行链式调用。 一,执行网络请求得到网络Response 如果response的状态...

  • http请求-自定义

    1.网络请求框架 实现 1.线程管理类 单例实现 2.请求的接口 3.请求的返回接口 4.请求的数据返回接口 5....

  • 网络接口请求

    #import "wodeViewController.h" #import "wodeTableViewCell...

  • 网络请求

    ios开发 合理封装请求接口 概述 如今大多的app都会与网络打交道,作为开发者 合理的对网络后台请求接口进行封装...

网友评论

      本文标题:网络请求(接口)

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