ASIHttpRequest addRequestHeader的處理


我現在用到了ASIHttpRequest來讀取數據,這時候我發現里面的頭在很多時候都是一樣的。如用戶的令牌,設備類型,ios版本,軟件版本等

    [self.request addRequestHeader:@"Authorization" value:[SaveData getStringFromSetting:@"Ticket"]];
    [self.request addRequestHeader:@"DeviceType" value:[StaticData getDeviceType]];
    [self.request addRequestHeader:@"SystemVersion" value:[StaticData getSystemVersion]];
    [self.request addRequestHeader:@"LocalVersion" value:[StaticData getLocalVersion]];


如果在每一個訪問網絡的地方都加這一個,這樣重復性就很大,所以需要抽出來。

我的想法是在父類中放一個方法,把我們需要訪問的網址給這個方法就可以了,所以我在父類中寫了一個讀取的方法。

-(void)readNetworkDataWithUrl:(NSString *)url number :(int)number
{
    [HUD show:YES];//顯示加載中狀態
    
    url = [NSString stringWithFormat:@"%@%@",[StaticData getUrlDomain],url];
    //訪問的地址
    NSURL *_url = [NSURL URLWithString:url];
    //訪問
    self.request = [ASIHTTPRequest requestWithURL:_url];
    //超時時間多少秒
    [self.request setTimeOutSeconds:120];
    //訪問失敗重新訪問次數
    [self.request setNumberOfTimesToRetryOnTimeout:2];
    //是否使用持久化連接
    [self.request setShouldAttemptPersistentConnection:NO];
    [self.request addRequestHeader:@"Authorization" value:[SaveData getStringFromSetting:@"Ticket"]];
    [self.request addRequestHeader:@"DeviceType" value:[StaticData getDeviceType]];
    [self.request addRequestHeader:@"SystemVersion" value:[StaticData getSystemVersion]];
    [self.request addRequestHeader:@"LocalVersion" value:[StaticData getLocalVersion]];
    
    //獲取數據成功執行的方法
    [self.request setCompletionBlock:^(void) {
        [HUD hide:YES];//隱藏加載中狀態
        NSString *jsonString = [self.request responseString];
        [self.delegate1 viewBaseReadDataSuccessWith:jsonString number:number];
    }];
    
    //獲取數據失敗執行的方法
    [self.request setFailedBlock:^(void){
        [HUD hide:YES];//隱藏加載中狀態
        if([self.delegate1 respondsToSelector:@selector(viewBaseReadDataFailed:)]){
            [self.delegate1 viewBaseReadDataFailed:number];
        }
    }];
    
    [self.request setDelegate:self];
    [self.request startAsynchronous];
}

 

本來我是想把讀到的值直接作返回值返出去,可是好象是異步處理的,返不出去。我就只能想辦法通過Delegate接口來把值傳出去了。

就是其中的

[self.delegate1 viewBaseReadDataSuccessWith:jsonString number:number];
[self.delegate1 viewBaseReadDataFailed:number];

 

現在我就通過繼承父類的接口來實現數據的處理。

實現方法如下:

#pragma mark -
#pragma mark ViewBaseForConnectNetwork Delegate
-(void)viewBaseReadDataSuccessWith:(NSString *)jsonString number:(int)nunmber
{
    NSMutableDictionary *tempDictionary = [jsonString JSONValue];
    bool result = [[tempDictionary objectForKey:@"Result"] intValue];

    if (result) {
        NSLog(@"in true");
        NSString *ticket = [[tempDictionary objectForKey:@"Content"] objectForKey:@"Ticket"];
        NSLog(@"%@",ticket);
    }else{
        NSLog(@"in false");
        NSString *message = [tempDictionary objectForKey:@"Message"];
        NSLog(@"%@",message);
    }
    
    
    LoginSuccessViewController *newView = [[LoginSuccessViewController alloc]init];
    newView.title = @"登錄成功";
    newView.hidesBottomBarWhenPushed = YES;
    [self.navigationController pushViewController:newView animated:YES];

}

-(void)viewBaseReadDataFailed:(int)number{
    NSLog(@"出錯執行的方法");
}

 

這樣就實現了我把公用的頭放到父類中的功能。

其中的 (int)nunmber 是處理一個頁面中會出現多次的請求,來區分是處理哪一個數據的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM