ASIHTTPRequest的使用与NSXMLParser的解析。

首先,可以去官方网站下载源码:https://allseeing-i.com/ASIHTTPRequest/


将如下的文件加载到项目中去,值得注意的是这些代码并没有使用ARC,如果要在ARC模式下使用,所以要在Build Phases的文件里添加-fno-objc-arc标记。

ASIHTTPRequestConfig.h

ASIHTTPRequestDelegate.h

ASIProgressDelegate.h

ASICacheDelegate.h

ASIHTTPRequest.h

ASIHTTPRequest.m

ASIDataCompressor.h

ASIDataCompressor.m

ASIDataDecompressor.h

ASIDataDecompressor.m

ASIFormDataRequest.h

ASIInputStream.h

ASIInputStream.m

ASIFormDataRequest.m

ASINetworkQueue.h

ASINetworkQueue.m

ASIDownloadCache.h

ASIDownloadCache.m

ASIAuthenticationDialog.h

ASIAuthenticationDialog.m

Reachability.h (在源码的 External/Reachability 目录下)

Reachability.m (在源码的 External/Reachability 目录下)


除此之外还需要添加:CFNetwork.framework,SystemConfiguration.framework, MobileCoreServices.framework,CoreGraphics.framework和libz.1.2.3.dylib


用法就超级简单了:


    NSURL *url = [NSURL URLWithString:@"http://book.huyingread.com:9999/httpservice?cmd=getusertimer&uid=107355342&at=j4tvVXmsAU2sck9NxBzb2y6N94cEUrIg5xwN1icq1jE%3D&v=2.2.5.800&sign=bb364955bf94dc37c0a0dbc101244570"];

   

    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

    

    [request setDelegate:self];

    

    //同步请求

  //  [request startSynchronous];

    

    

    //异步请求

    [request startAsynchronous];


应该尽量优先异步请求,否则主线程可能会卡死。





//asihttp返回的数据

- (void)requestFinished:(ASIHTTPRequest *)request


{

    

  // 当以文本形式读取返回内容时用这个方法

  //  NSString *responseString = [request responseString];

    

    

    //有中文的xml格式

    NSString *responseString = [[NSString alloc] initWithData:[request responseData] encoding:NSUTF8StringEncoding];

    

    

    if (responseString != nil && responseString.length > 0) {

       //一般收到xmljson的数据

        NSData* xmlData = [responseString dataUsingEncoding:NSUTF8StringEncoding];

        

        //nsxml解析数据

        NSXMLParser * parser = [[NSXMLParser alloc]initWithData:xmlData];

        [parser setDelegate:self];

        [parser parse];

     

        NSLog(@"%@",xmlData);

        

    }else{//一般是收到图片数据等2进制数据

        

        NSData *responseData = [request responseData];

        

        

        UIImage *image = [UIImage imageWithData: responseData];

        

        

        myImageView.image = image;

        

    }


    

    

}



//返回错误码。

- (void)requestFailed:(ASIHTTPRequest *)request

{

NSError *error = [request error];

}


********************/NSXMLParser解析/


        NSData* xmlData = [responseString dataUsingEncoding:NSUTF8StringEncoding];

        

        //nsxml解析数据

        NSXMLParser * parser = [[NSXMLParser alloc]initWithData:xmlData];

        [parser setDelegate:self];

        [parser parse];

//设置以后就会进行回调


//开始进行解析,一般进行些初始化的操作。

- (void)parserDidStartDocument:(NSXMLParser *)parser {

    dataDict = [[NSMutableDictionary alloc] initWithCapacity:0];  //每一条信息都用字典来存储

}


//发现元素开始符的处理函数

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {


}


//处理标签包含内容字符

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {

    //记录所取得的文字列

    parserString = string;

    

}


//发现元素结束符的处理函数,保存元素各项目数据(即报告元素的结束标记)

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName

  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

    

    [dataDict setObject:parserString forKey:elementName];

    NSLog(@"%@",dataDict);

}


//报告不可恢复的解析错误

- (void)requestFailed:(ASIHTTPRequest *)request

{

    

    NSError *error = [request error];

    

}


//报告解析的结束

- (void)parserDidEndDocument:(NSXMLParser *)parser{

    NSLog(@"over");

}








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值