iOS开发 -"ASI"使用实例

ASI

#import "ViewController.h"
#import "ASIHTTPRequest.h"

@interface HMViewController () <ASIHTTPRequestDelegate>
@property (nonatomic, strong) ASIHTTPRequest *request;
@end

@implementation HMViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self asynGet];
}

发送请求

#pragma mark - ASIHTTPRequestDelegate
/**
 *  1.开始发送请求
 */
- (void)requestStarted:(ASIHTTPRequest *)request
{
    NSLog(@"requestStarted");
}
/**
 *  2.接收到服务器的响应头信息
 */
- (void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders
{
    NSLog(@"didReceiveResponseHeaders");
}
/**
 *  3.接收到服务器的实体数据(具体数据)
 *  只要实现了这个代理方法,responseData\responseString就没有值
 */
//- (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data
//{
//    NSLog(@"didReceiveData-%@", data);
//}
/**
 *  4.服务器的响应数据接收完毕
 */
- (void)requestFinished:(ASIHTTPRequest *)request
{
    NSLog(@"requestFinished--%@", [request responseData]);
}
/**
 *  5.请求失败
 */
- (void)requestFailed:(ASIHTTPRequest *)request
{
    NSLog(@"requestFailed");
}

发送异步的GET请求

/**
 *  异步的GET请求
 */
- (void)asynGet
{
    // 1.URL
    NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/video"];

    // 2.创建一个请求对象
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    request.timeOutSeconds = 15; // 15秒后服务器还没有响应,就算超时
    // 设置代理
    request.delegate = self;

    // 3.开始请求
    [request startAsynchronous];

    self.request = request;
}

- (void)dealloc
{
    // 这句代码为了防止:控制器销毁了,request还回来调用控制器的代理方法,引发野指针
    [self.request clearDelegatesAndCancel];
}

发送同步的GET请求

/**
 *  同步的GET请求
 */
- (void)synGet
{
    // 1.URL
    NSURL *url = [NSURL URLWithString:@"http://localhost:8080/Server/video"];

    // 2.创建一个请求对象
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    request.timeOutSeconds = 15; // 15秒后服务器还没有响应,就算超时

    // 3.开始请求(这行代码会卡主,等待服务器给数据)
    [request startSynchronous];

    // 4.请求完毕
    NSError *error = [request error];
    if (error) {
        NSLog(@"请求失败---%@", error);
    } else {
        NSData *data = [request responseData];
        //        NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        //        NSString *str = [request responseString];

        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
        NSLog(@"请求成功---%@", dict);
    }
}

监听ASI的block请求

 监听ASI的请求
 1.成为代理,遵守ASIHTTPRequestDelegate协议,实现协议中的代理方法
 request.delegate = self;
 - (void)requestStarted:(ASIHTTPRequest *)request;
 - (void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders;
 - (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data;
 - (void)requestFinished:(ASIHTTPRequest *)request;
 - (void)requestFailed:(ASIHTTPRequest *)request;

 2.成为代理,不遵守ASIHTTPRequestDelegate协议,自定义代理方法
 request.delegate = self;
 [request setDidStartSelector:@selector(start:)];
 [request setDidFinishSelector:@selector(finish:)];

 3.设置block
 [request setStartedBlock:^{
    NSLog(@"setStartedBlock");
 }];
 [request setHeadersReceivedBlock:^(NSDictionary *responseHeaders) {
    NSLog(@"setHeadersReceivedBlock--%@", responseHeaders);
 }];
 [request setDataReceivedBlock:^(NSData *data) {
    NSLog(@"setDataReceivedBlock--%@", data);
 }];
 [request setCompletionBlock:^{
    NSLog(@"setCompletionBlock");
 }];
 [request setFailedBlock:^{
    NSLog(@"setFailedBlock");
 }];
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // 1.URL
    NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/video"];

    // 2.创建一个请求对象
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

    // 3.开始请求
    [request startAsynchronous];

    // 4.设置监听方法
    request.delegate = self;
    [request setDidStartSelector:@selector(start:)];
    [request setDidFinishSelector:@selector(finish:)];
}

- (void)start:(ASIHTTPRequest *)request
{
    NSLog(@"start--%@", request);
}

- (void)finish:(ASIHTTPRequest *)request {
    NSLog(@"finish--%d %@ %@", [request responseStatusCode], [request responseStatusMessage], [request responseData]);
}

- (void)asyncBlock
{
    // 1.URL
    NSURL *url = [NSURL URLWithString:@"http://localhost:8080/Server/video"];

    // 2.创建一个请求对象
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

    // 如果同时设置了block和实现了代理方法,请求过程中,block和代理方法都会调用,
    // 一般的调用顺序:代理方法 > block
    //    request.delegate = self;

    // 3.开始请求
    [request startAsynchronous];

    // 4.设置block监听
    [request setStartedBlock:^{
        NSLog(@"setStartedBlock");
    }];
    [request setHeadersReceivedBlock:^(NSDictionary *responseHeaders) {
        NSLog(@"setHeadersReceivedBlock--%@", responseHeaders);
    }];
    [request setDataReceivedBlock:^(NSData *data) {
        NSLog(@"setDataReceivedBlock--%@", data);

    }];
    [request setCompletionBlock:^{
        NSLog(@"setCompletionBlock");
    }];
    [request setFailedBlock:^{
        NSLog(@"setFailedBlock");
    }];
}

文件下载

#import "ViewController.h"
#import "ASIHTTPRequest.h"

@interface HMViewController () // <ASIProgressDelegate>
@property (weak, nonatomic) IBOutlet UIProgressView *progressView;
@property (nonatomic, assign) BOOL downloading;
@property (nonatomic, strong) ASIHTTPRequest *request;
@end

@implementation HMViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self download];
}

- (void)download
{
    if (self.downloading) {
        [self.request clearDelegatesAndCancel];

        self.downloading = NO;
    } else {
        // 1.URL
        NSURL *url = [NSURL URLWithString:@"http://localhost:8080/Server/resources/test.mp4"];

        // 2.创建一个请求对象
        ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

        // 3.设置文件的缓存路径
        NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
        NSString *filepath = [caches stringByAppendingPathComponent:@"test.mp4"];
        request.downloadDestinationPath = filepath;

        // 4.设置进度监听的代理(要想成为进度监听代理,最好遵守ASIProgressDelegate协议)
        request.downloadProgressDelegate = self.progressView;

        // 这个属性设置为YES,就会支持断点下载
        request.allowResumeForFileDownloads = YES;

        // 如果要实现断点续传,需要设置一个文件的临时路径
        request.temporaryFileDownloadPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"test.temp"];

        // 5.开始请求
        [request startAsynchronous];
        self.request = request;

        self.downloading = YES;
    }
}

- (void)setProgress:(float)newProgress
{
//    NSLog(@"下载进度--%f", newProgress);
    self.progressView.progress = newProgress;
}
@end

文件上传

#import "ViewController.h"
#import "ASIFormDataRequest.h"
#import "ASINetworkQueue.h"

@interface HMViewController ()
@property (weak, nonatomic) IBOutlet UIProgressView *progressView;
@end

@implementation HMViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

//    ASINetworkQueue *queue = [ASINetworkQueue queue];
//    queue.shouldCancelAllRequestsOnFailure = YES;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // 1.URL
    NSURL *url = [NSURL URLWithString:@"http://localhost:8080/Server/upload"];

    // 2.创建一个请求对象
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

    // 3.设置请求参数
    [request setPostValue:@"zhangsan" forKey:@"username"];
    [request setPostValue:@"123" forKey:@"pwd"];
    [request setPostValue:@"28" forKey:@"age"];
    [request setPostValue:@"1.89" forKey:@"height"];

    // 设置文件参数
    NSString *file = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp4"];
    // 如果知道文件路径,最好就用这个方法(因为简单)
    // ASI内部会自动识别文件的MIMEType
    [request setFile:file forKey:@"file"];
   [request setFile:file withFileName:@"basic.pptx" andContentType:@"application/vnd.openxmlformats-officedocument.presentationml.presentation" forKey:@"file"];

    // 如果文件数据是动态产生的,就用这个方法(比如刚拍照完获得的图片数据)
//    [request setData:<#(id)#> withFileName:<#(NSString *)#> andContentType:<#(NSString *)#> forKey:<#(NSString *)#>];

    // 4.设置监听上传进度的代理
    request.uploadProgressDelegate = self.progressView;

    // 5.开始请求
    [request startAsynchronous];

    // 6.监听完毕
    __weak typeof(request) weakRequest = request;
    [request setCompletionBlock:^{
        NSLog(@"%@", [weakRequest responseString]);
    }];
}
@end
时间: 2024-08-28 00:03:41

iOS开发 -"ASI"使用实例的相关文章

IOS开发-图片浏览器实例-UIImageView的使用-懒加载-plist文件的使用

一.本文概述 一个使用UIImageView.UILabel.UIButton实现的图片浏览器的实例,界面如图:   功能描述: 1. 点击左右箭头切换图片.图片描述.图片序号: 2.第一张图片时左箭头不能点击 3.最后一张图片时右箭头不能点击 4.点击设置按钮出现一个可设置的界面(上图中黄色背景的部分)可以设置模式和对图片的缩放 实现概述: 1.搭建UI界面,使用UIImageView控件显示图片 2. 监听个按钮的点击 3. 切换图片内容,描述,序号.背景色及UIImageView的tran

iOS开发 - 私人通讯录实例

私人通讯录实例 此实例主要练习UIViewController控制器的使用 创建模型类Model /** copy : NSString\NSMutableString\block weak : 代理\UI控件 strong : 其他OC对象 assign : 基本数据类型(int\float)\枚举\结构体 */ #import <Foundation/Foundation.h> @interface ZLContact : NSObject @property(nonatomic,copy

IOS开发之小实例--UIImagePickerController

前言:本篇博文是本人阅读国外的IOS Programming Tutorial的一篇入门文章的学习过程总结,难度不大,因为是入门.主要是入门UIImagePickerController这个控制器,那么这个控制器是干嘛的呢?就是调用设备摄像机功能用的.到后面可能需要您在真机上测试,因为iPhone模拟器无法支持摄像机功能,运行测试会崩溃的哦. 网址:http://www.appcoda.com/ios-programming-camera-iphone-app 其实我就按照这篇博文的讲解过程,自

IOS开发之小实例--创建一个简单的用于视频录制和回放的应用程序

前言:还是看了一下国外的入门IOS文章:<Create a Simple App for Video Recording and Playback>,主要涉及视频录制和回放的功能的基本实现. iOS的API用于记录和播放视频的对刚入门IOS的新人有点混乱,因为有几个可用的选项.如果你只是想打一个视频,你可以用MediaPlayer的框架,它可以让我们发挥我们的设备本地存储的视频,或从远程位置.但是,如果你需要高级功能,如媒体资产管理,媒体编辑,跟踪管理,和其他人,你必须使用AVFoundati

IOS开发之 一个实例解析 录音

导入框架: #import <AVFoundation/AVFoundation.h> 声明全局变量: @interface ViewController ()<AVAudioRecorderDelegate> { AVAudioRecorder *audioRecorder; } @end 在ViewDidLoad中:  UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];     button.fram

iOS开发网络篇—简单介绍ASI框架的使用

iOS开发网络篇—简单介绍ASI框架的使用 说明:本文主要介绍网络编程中常用框架ASI的简单使用. 一.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大. ASI的实现基于底层的CFNetwork框架,因此运行效率很高.可惜作者早已停止更新,有一些潜在的BUG无人去解决 ASI的github地址 https://github.com/pokeb/asi-http-request ASI的使用参考 http://www.cnblogs.com/dot

iOS开发-植入广告(iAd, Admob实例)

应用中植入广告是一种很好的盈利手段. 下面介绍主流的两种方法.iAd, Admob 先mark一个很详细的pdf.   http://pan.baidu.com/share/link?shareid=1656439633&uk=1394536315&fid=406566606116897 一.iAd 1.需要加入iAd.framework 2.   .h文件加入如下代码 #import <UIKit/UIKit.h> #import <iAd/iAd.h> @int

iOS开发网络篇—使用ASI框架进行文件下载

原文  http://www.cnblogs.com/wendingding/p/3961681.html iOS开发网络篇—使用ASI框架进行文件下载 说明 :本文介绍iOS网络编程中经常用到的框架ASI,如何使用该框架进行文件的下载. 一.简单介绍 代码示例: 1 #import "YYViewController.h" 2 #import "ASIHTTPRequest.h" 3 4 @interface YYViewController () 5 6 7 @

ios开发--旋转、移动、缩放手势实例代码

代码如下: C代码   // 添加所有的手势 - (void) addGestureRecognizerToView:(UIView *)view { // 旋转手势 UIRotationGestureRecognizer *rotationGestureRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotateView:)]; [view addGestureReco

iOS开发- UICollectionView详解+实例

iOS开发- UICollectionView详解+实例 本章通过先总体介绍UICollectionView及其常用方法,再结合一个实例,了解如何使用UICollectionView. UICollectionView 和 UICollectionViewController 类是iOS6 新引进的API,用于展示集合视图,布局更加灵活,可实现多列布局,用法类似于UITableView 和 UITableViewController 类. 使用UICollectionView 必须实现UICol