NSURLSession请求封装加HUD加载框

在.h里面的方法 定义单例类

typedef void(^SuccessBlock) (id block);
typedef void(^FailureBlock) (id block);

@interface NetRequest : NSObject <NSURLSessionDelegate>

+ (instancetype)shareInstance;
- (void)requestWithURL:(NSString *)url params:(NSDictionary *)params successBlock:(SuccessBlock)success failure:(FailureBlock)failure;
#import <SVProgressHUD.h> // 第三方加载条控件

static NetRequest *reuqest;

@implementation NetRequest
{
    SuccessBlock sucblock;
    FailureBlock faiBlock;
    NSMutableData *_allData;
}
+ (instancetype)shareInstance
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        reuqest = [[NetRequest alloc] init];
    });
    return reuqest;
}

+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
    if (!reuqest) {
        reuqest = [super allocWithZone:zone];
    }
    return reuqest;
}

- (id)copy
{
    return reuqest;
}

- (void)requestWithURL:(NSString *)url params:(NSDictionary *)params successBlock:(SuccessBlock)success failure:(FailureBlock)failure
{
    NSURLRequest *myRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15];

    NSURLSessionDownloadTask *downLoad =[[NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]] downloadTaskWithRequest:myRequest];

    // 开始请求
    [SVProgressHUD  showWithStatus:@"正在加载..."]; //提示加载
    [downLoad resume];

    sucblock = success;
    faiBlock = failure;

}

// 请求完成
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location
{
    NSData *data = [NSData dataWithContentsOfURL:location];
    id reuslt = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
    sucblock(reuslt);
    [SVProgressHUD dismiss];
}
// 网络请求进度
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
      didWriteData:(int64_t)bytesWritten
 totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{
    double progress = ( double
                       )totalBytesWritten / totalBytesExpectedToWrite;

    NSLog ( @" 下载进度 ---%f"
           , progress);
    [SVProgressHUD showProgress:progress];

}

然后再viewcontroller里面就可以写

// 请求
    NSString *string = [NSString stringWithFormat:@"http://……………………………………];
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:string]];

    // 配置
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

    // 任务
    NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        NSLog(@"%@", result); }

一般我们都会封装一个AFN的网络请求 可以满足我们基本上的任何需要 但是偶尔我们也是要用一些

NSURLSession  如果特殊情况 封装好了以后可以拿过来用了 
时间: 2024-10-01 05:17:25

NSURLSession请求封装加HUD加载框的相关文章

jQuery Ajax封装(附带加载提示和请求结果提示模版)

1.创建HTML文件(demo) <!doctype html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>jQuery Ajax</title> <script type="text/javascript" src="jquery-3.2.0.min.js"></sc

ios新手开发——toast提示和旋转图片加载框

不知不觉自学ios已经四个月了,从OC语法到app开发,过程虽然枯燥无味,但是结果还是挺有成就感的,在此分享我的ios开发之路中的小小心得~废话不多说,先上我们今天要实现的效果图: 有过一点做APP经验的都知道,提示框和等待加载框一直是APP首当其中的效果,ios不像android一样,自带toast和progressbarDialog,所以在做ios开发的时候,我首先想到了先封装这两个基础控件~当然网上的资源数不胜数,但是博主抱着一颗自主研究的精神,做出的效果也不错,也已适配了所有iphone

Ajax全局加载框(Loading效果)的配置

在Ajax进行后台数据请求的过程中,我们有时候会希望用户能知道页面后台还在做一些事情,这时候就需要给用户一个非常明确的提示,也就是我们所谓的进度条 废话完成~ 实现原理: Jquery可以对ajax进行全局的设置,实现类似于C#中面向切面的效果,即对在Ajax提交之前和提交完成之后,我们均可以对其进行一系列的操作,所以我们可以在ajax开始的时候,把Loading框显示出来,在ajax请求完成之后,把loading框关闭掉,基本上就完美实现这个效果了. Jquery全局配置Ajax的方式为: 1

加载框(loading)

一般在用户提交数据或者新加载页面时,请求服务器的过程,页面没有响应,但是用户并不知道,此时在发生什么.这时,就需要loading框给用户提示,增加用户体验. 1.引入loading.css. html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{line-height:1.6;font-family:-apple-system-font,Helvetica Neue,sans-serif}*{margin:0;padd

网络请求库和图片加载库

网络请求库 概述:所有网络库的原理是: 网络请求一般是基于HttpURLConnection和HttpClient进行封装的,也有自己编写Socket实现的,比如ion和OkHttp:请求的执行一般是通过线程池来管理,异步请求得到结果,则通过回调接口接收:并且一般接收结果的回调都通过Handler去在主线程执行 Ion的使用 详情查看Github主页https://github.com/koush/ion 介绍: 它支持网络请求和进行图片加载的双重功能 拥有链式api风格(Fluent API)

Android分分钟教你写一个个性化的加载框

闲来无事写的一个加载框,实现效果如下: 实现思路: 其实看样子就感觉很简单的...在自定义Relativelayout里用onDraw绘制就行了. 复习了一下以前学的知识. 代码实现: package com.whale.nangua.toquan.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.

android加载框效果《IT蓝豹》

android加载框效果 android加载框效果,本例子有几种效果弹出dialog,本例子主要自定义SVProgressHUD 类,本例子来源:https://github.com/saiwu-bigkoo/Android-SVProgressHUD主要代码如下: public enum SVProgressHUDMaskType {            None,  // 允许遮罩下面控件点击               Clear,     // 不允许遮罩下面控件点击         

一个mui扩展插件mui.showLoading加载框【转】

转:http://ask.dcloud.net.cn/article/12856 写在前面:好像mui目前dialog系列唯独缺少showLoading加载框(加载中)组件,为了统一组件样式和体验,写了这么一个扩展插件.CSS和JS代码耦合性应该还是较低的,不妥之处欢迎指教!优点:可以同时兼容Html5和plus,不必为不同环境单独分别Loading组件.缺点:在页面嵌套情况下,遮罩仅对当前页面起作用. 使用方法:显示加载框: mui.showLoading("正在加载..",&quo

GridView实现一个图片加多个文本框

GridView的使用是很简单的,API Demo中有例子,但是要实现复杂的GridView,就需要自定义了. 今天我们要实现如下的效果: 先说它的布局,它是由gridview和grid_item两部分组成. main.xml   <?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android="http://schemas.android.com/apk/res/androi