• 异步加载网络数据,自定义进度条显示


    原文地址:http://gekie.iteye.com/blog/1135627

     

     

     

     

    Objective-c代码 复制代码 收藏代码
    1. //调用方式   
    2.   
    3. Ajax *ajax = [[Ajax alloc]Ajax:urlStr    
    4.         target:self    
    5.         didFinish:@selector(showData:)    
    6.         isAllValues:NO    
    7.         valueForKey:@"list"  
    8.         showProgressBar:YES];   
    9. [ajax release];   
    10.   
    11. //异步回调方法   
    12. -(void) showData:(NSArray*)data{   
    13.    NSLog(@"data:%@",data);   
    14. }  
    //调用方式
    
    Ajax *ajax = [[Ajax alloc]Ajax:urlStr 
    		target:self 
    		didFinish:@selector(showData:) 
    		isAllValues:NO 
    		valueForKey:@"list"
    		showProgressBar:YES];
    [ajax release];
    
    //异步回调方法
    -(void) showData:(NSArray*)data{
       NSLog(@"data:%@",data);
    }

     

    Objective-c代码 复制代码 收藏代码
    1. //   
    2. //  Ajax.h   
    3. //  live   
    4. //   
    5. //  Created by xjj xjj on 11-7-28.   
    6. //  Copyright 2011 新境界. All rights reserved.   
    7. //   
    8.   
    9. #import <Foundation/Foundation.h>   
    10. #import "UIProgressBar.h"  
    11.   
    12. @interface Ajax : NSObject {   
    13.   
    14. }   
    15. @property(nonatomic,assign) id target;   
    16. @property(nonatomic)SEL didFinish;   
    17. @property(nonatomic,retain) NSMutableData *buf;   
    18. @property(nonatomic,retain) NSURLConnection *connection;   
    19. @property(nonatomic,assign) BOOL isAllValues;   
    20. @property(nonatomic,assign) NSString* valueForKey;   
    21. @property(nonatomic,assign) BOOL isText;   
    22. @property(nonatomic,assign) NSString *urlStr;   
    23. @property(nonatomic,retain) UIProgressBar *progressBar;   
    24. @property(nonatomic,assign) long contentLength;   
    25. @property(nonatomic,assign) BOOL showProgressBar;   
    26.   
    27. -(void)start;   
    28. -(void)hiddenProgreesBar;   
    29.   
    30. /*!   
    31. @method Ajax:target:didFinish:isAllValues:valueForKey:   
    32. @discussion 异步加载某个节点数据(JSON格式)   
    33. @param _urlStr 网络数据URL   
    34. @param _target 调用者   
    35. @param _didFinish 数据加载完毕后通知动作   
    36. @param _isAllValues 是否返回所有数据 NO or YES   
    37. @param _valueForKey 加载某个节点数据   
    38. @result 初始化Ajax实例,并异步执行   
    39. */   
    40. -(id) Ajax:(NSString*)_urlStr target:(id)_target didFinish:(SEL)_didFinish isAllValues:(BOOL)_isAllValues valueForKey:(NSString *)_valueForKey;   
    41.   
    42. /*!   
    43. @method Ajax:target:didFinish:   
    44. @discussion 异步加数据(文件本格式)所有文本数据   
    45. @param _urlStr 网络数据URL   
    46. @param _target 调用者   
    47. @param _didFinish 数据加载完毕后通知动作   
    48. @result 初始化Ajax实例,并异步执行   
    49. */   
    50. -(id) Ajax:(NSString*)_urlStr target:(id)_target didFinish:(SEL)_didFinish;   
    51.   
    52. /*!   
    53. @method Ajax:target:didFinish:isAllValues:valueForKey:showProgressBar:   
    54. @discussion 异步加载某个节点数据(JSON格式)   
    55. @param _urlStr 网络数据URL   
    56. @param _target 调用者   
    57. @param _didFinish 数据加载完毕后通知动作   
    58. @param _isAllValues 是否返回所有数据 NO or YES   
    59. @param _valueForKey 加载某个节点数据   
    60. @param _showProgressBar 是否显示进度条 NO or YES   
    61. @result 初始化Ajax实例,并异步执行   
    62. */   
    63. -(id) Ajax:(NSString*)_urlStr target:(id)_target didFinish:(SEL)_didFinish isAllValues:(BOOL)_isAllValues valueForKey:(NSString *)_valueForKey showProgressBar:(BOOL)_showProgressBar;   
    64.   
    65. /*!   
    66. @method Ajax:target:didFinish:showProgressBar   
    67. @discussion 异步加数据(文件本格式)所有文本数据   
    68. @param _urlStr 网络数据URL   
    69. @param _target 调用者   
    70. @param _didFinish 数据加载完毕后通知动作   
    71. @param _showProgressBar 是否显示进度条 NO or YES   
    72. @result 初始化Ajax实例,并异步执行   
    73. */   
    74. -(id) Ajax:(NSString*)_urlStr target:(id)_target didFinish:(SEL)_didFinish showProgressBar:(BOOL)_showProgressBar;   
    75.   
    76. @end  
    //
    //  Ajax.h
    //  live
    //
    //  Created by xjj xjj on 11-7-28.
    //  Copyright 2011 新境界. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import "UIProgressBar.h"
    
    @interface Ajax : NSObject {
    
    }
    @property(nonatomic,assign) id target;
    @property(nonatomic)SEL didFinish;
    @property(nonatomic,retain) NSMutableData *buf;
    @property(nonatomic,retain) NSURLConnection *connection;
    @property(nonatomic,assign) BOOL isAllValues;
    @property(nonatomic,assign) NSString* valueForKey;
    @property(nonatomic,assign) BOOL isText;
    @property(nonatomic,assign) NSString *urlStr;
    @property(nonatomic,retain) UIProgressBar *progressBar;
    @property(nonatomic,assign) long contentLength;
    @property(nonatomic,assign) BOOL showProgressBar;
    
    -(void)start;
    -(void)hiddenProgreesBar;
    
    /*!
    @method Ajax:target:didFinish:isAllValues:valueForKey:
    @discussion 异步加载某个节点数据(JSON格式)
    @param _urlStr 网络数据URL
    @param _target 调用者
    @param _didFinish 数据加载完毕后通知动作
    @param _isAllValues 是否返回所有数据 NO or YES
    @param _valueForKey 加载某个节点数据
    @result 初始化Ajax实例,并异步执行
    */
    -(id) Ajax:(NSString*)_urlStr target:(id)_target didFinish:(SEL)_didFinish isAllValues:(BOOL)_isAllValues valueForKey:(NSString *)_valueForKey;
    
    /*!
    @method Ajax:target:didFinish:
    @discussion 异步加数据(文件本格式)所有文本数据
    @param _urlStr 网络数据URL
    @param _target 调用者
    @param _didFinish 数据加载完毕后通知动作
    @result 初始化Ajax实例,并异步执行
    */
    -(id) Ajax:(NSString*)_urlStr target:(id)_target didFinish:(SEL)_didFinish;
    
    /*!
    @method Ajax:target:didFinish:isAllValues:valueForKey:showProgressBar:
    @discussion 异步加载某个节点数据(JSON格式)
    @param _urlStr 网络数据URL
    @param _target 调用者
    @param _didFinish 数据加载完毕后通知动作
    @param _isAllValues 是否返回所有数据 NO or YES
    @param _valueForKey 加载某个节点数据
    @param _showProgressBar 是否显示进度条 NO or YES
    @result 初始化Ajax实例,并异步执行
    */
    -(id) Ajax:(NSString*)_urlStr target:(id)_target didFinish:(SEL)_didFinish isAllValues:(BOOL)_isAllValues valueForKey:(NSString *)_valueForKey showProgressBar:(BOOL)_showProgressBar;
    
    /*!
    @method Ajax:target:didFinish:showProgressBar
    @discussion 异步加数据(文件本格式)所有文本数据
    @param _urlStr 网络数据URL
    @param _target 调用者
    @param _didFinish 数据加载完毕后通知动作
    @param _showProgressBar 是否显示进度条 NO or YES
    @result 初始化Ajax实例,并异步执行
    */
    -(id) Ajax:(NSString*)_urlStr target:(id)_target didFinish:(SEL)_didFinish showProgressBar:(BOOL)_showProgressBar;
    
    @end
    

     

    实现

     

    Objective-c代码 复制代码 收藏代码
    1. //   
    2. //  Ajax.m   
    3. //  live   
    4. //   
    5. //  Created by xjj xjj on 11-7-28.   
    6. //  Copyright 2011 新境界. All rights reserved.   
    7. //   
    8.   
    9. #import "Ajax.h"  
    10. #import "JSONParser.h"  
    11. #import "UIProgressBar.h"  
    12.   
    13. @implementation Ajax   
    14. @synthesize target,didFinish;   
    15. @synthesize buf;   
    16. @synthesize connection;   
    17. @synthesize isAllValues,valueForKey;   
    18. @synthesize isText;   
    19. @synthesize urlStr;   
    20. @synthesize progressBar;   
    21. @synthesize contentLength;   
    22. @synthesize showProgressBar;   
    23.   
    24. -(id) Ajax:(NSString*)_urlStr target:(id)_target didFinish:(SEL)_didFinish showProgressBar:(BOOL)_showProgressBar{   
    25.     if(self){   
    26.         self.showProgressBar = _showProgressBar;   
    27.         self.urlStr = _urlStr;   
    28.         self.isText = YES;   
    29.         self.target = _target;   
    30.         self.didFinish = _didFinish;   
    31.         [self start];   
    32.     }   
    33.     return self;   
    34. }   
    35. -(id) Ajax:(NSString*)_urlStr target:(id)_target didFinish:(SEL)_didFinish{   
    36.     /*self = [super init];   
    37.     if(self){   
    38.         self.showProgressBar = YES;   
    39.         self.urlStr = _urlStr;   
    40.         self.isText = YES;   
    41.         self.target = _target;   
    42.         self.didFinish = _didFinish;   
    43.         [self start];   
    44.     }   
    45.     return self;*/   
    46.     return [self Ajax:_urlStr target:_target didFinish:_didFinish showProgressBar:YES];   
    47. }   
    48.   
    49. -(id) Ajax:(NSString *)_urlStr target:(id)_target didFinish:(SEL)_didFinish isAllValues:(BOOL)_isAllValues valueForKey:(NSString *)_valueForKey showProgressBar:(BOOL)_showProgressBar{   
    50.     self = [super init];   
    51.     if(self){   
    52.         self.showProgressBar = _showProgressBar;   
    53.         self.urlStr = _urlStr;   
    54.         self.isAllValues = _isAllValues;   
    55.         self.valueForKey = _valueForKey;   
    56.         self.target = _target;   
    57.         self.didFinish = _didFinish;   
    58.         [self start];   
    59.     }   
    60.     return self;   
    61. }   
    62.   
    63. -(id) Ajax:(NSString *)_urlStr target:(id)_target didFinish:(SEL)_didFinish isAllValues:(BOOL)_isAllValues valueForKey:(NSString *)_valueForKey{   
    64.     return [self Ajax:_urlStr target:_target didFinish:_didFinish isAllValues:_isAllValues valueForKey:_valueForKey showProgressBar:YES];   
    65. }   
    66.   
    67. -(void)start{   
    68.     if(connection==nil){   
    69.         [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;   
    70.         buf = [[NSMutableData alloc] initWithLength:0];   
    71.         NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init];   
    72.         [request setURL:[NSURL URLWithString:urlStr]];   
    73.         [request setHTTPMethod:@"GET"];   
    74.         connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];   
    75.            
    76.         if([target isKindOfClass:[UIViewController class]]==YES&&showProgressBar==YES){   
    77.             UIViewController *viewController = (UIViewController*)target;   
    78.             progressBar = [[UIProgressBar alloc] initWithFrame:CGRectMake(0, viewController.view.frame.size.height - 10,viewController.view.frame.size.width, 10)];   
    79.             progressBar.minValue = 0;   
    80.                
    81.             [progressBar setLineColor:[UIColor blackColor]];   
    82.             [progressBar setProgressColor:[UIColor redColor]];     
    83.             //[progressBar setProgressColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"3.png"]]];    
    84.             [progressBar setProgressRemainingColor:[UIColor greenColor]];   
    85.             [viewController.view addSubview:progressBar];      
    86.         }   
    87.         [request release];   
    88.     }   
    89. }   
    90. //收到响应时   
    91. - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{   
    92.     if(progressBar!=nil)   
    93.         progressBar.maxValue = response.expectedContentLength;   
    94. }   
    95. //接收数据   
    96. -(void)connection:(NSURLConnection *)aConn didReceiveData:(NSData *)data{   
    97.     [buf appendData:data];   
    98.     if(progressBar!=nil)   
    99.         progressBar.currentValue += [data length];   
    100. }   
    101. //加载失败   
    102. -(void)connection:(NSURLConnection*)aConn didFailWithError:(NSError*)error{   
    103.     NSLog(@"didFailWithError:%@",error);   
    104.     [self hiddenProgreesBar];   
    105. }   
    106. //接收完毕   
    107. -(void)connectionDidFinishLoading:(NSURLConnection *)connection{   
    108.     if(didFinish!=nil){   
    109.         if(isText)   
    110.             [target performSelector:didFinish withObject:buf];   
    111.         else{   
    112.             NSArray *data = [JSONParser parseJSON:buf isAllValues:isAllValues valueForKey:valueForKey];   
    113.             [target performSelector:didFinish withObject:data];   
    114.         }   
    115.     }   
    116.     [self hiddenProgreesBar];   
    117. }   
    118. -(void) hiddenProgreesBar{   
    119.     if(progressBar!=nil){   
    120.     //淡淡消失效果   
    121.         [UIView animateWithDuration:2  
    122.                      animations:^{   
    123.                          progressBar.alpha = 0;   
    124.                      }];   
    125.         [progressBar performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:2];   
    126.     }   
    127.     [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;   
    128. }   
    129. -(void)dealloc{   
    130.     [connection release];   
    131.     [buf release];   
    132.     [progressBar release];   
    133.     [super dealloc];   
    134. }   
    135. @end
  • 相关阅读:
    CVS,GIT,Mercurial和SVN比较
    ubuntu-使用终端配置网络
    编写简单的hashCode方法
    编写高质量equals方法
    文件上传和下载
    Java常用命令
    增删查改-MySQL
    Newton迭代法-C++
    二分法-C++
    适配器模式
  • 原文地址:https://www.cnblogs.com/zhwl/p/2845293.html
Copyright © 2020-2023  润新知