Search code examples
iphonefor-loopasihttprequesthttpconnectionpostdata

Send data to the server using for loop of HTTP POST in iPhone


I want send to the data on the server in batches. I have to send nsmutablestring data with 25 strings at a time then get response and if the response is success then again send the next batch. I am using HTTPConnection class.The code that I am using is like:

    HttpConnectionClass * ht= [[HttpConnectionClass alloc] init];
ht.delegate=self;
ht.isNetworkIndicator = YES;
NSString *data = @"" ;
int i = 0;
self.dataforserver = [[NSMutableString alloc]init] ;
[self.dataforserver setString:@""]; 
for (i=0;i<= self.dataArray.count-1; i++) {  
    data =[NSString stringWithFormat:@"A%d%@",[[self.recordIDArray objectAtIndex:i]intValue], [self.dataArray objectAtIndex:i]];
     [self.dataforserver appendString:data];

    if ((i+1)%25 == 0 && i!=0 ) {

                 [ht makeHttpConnection:[NSString stringWithFormat:@"http://www.url.com?action=%d&subscriberid=%d&type=%@",2,56904,@"full"] withData:self.dataforserver];

        NSLog(@"in for loop dataforserver is %@",dataforserver);

       [dataforserver setString:@""];     
    }
      }
    if (dataforserver != @"" ) {
    NSLog(@"not in for loop dataforserver is %@",dataforserver);
    [ht makeHttpConnection:[NSString stringWithFormat:@"http://www.url.com?action=%d&subscriberid=%d&type=%@",2,56904,@"full"] withData:self.dataforserver];
     }   

I am getting response in the following method

    -(void)getHttpData:(NSObject*)data isError:(BOOL)isErr errorMsg:(NSString*)err{

    NSString *response=(NSString*)data;
     NSLog(@"response is %@",response);


    }

I want to continue the loop only if I get the response "SUCCESS". Can anyone suggest how to achieve it. I am very new to iOS programming.Please help


Solution

  • I solved this problem by using ASIHttpRequest class which is available on github. I am posting the code that I used if anybody gets the same issue

    {
    NSString *data = @"" ;
    int i = 0;
    int batchCount =5;
    NSString *type = @"full";
    
    self.dataforserver = [[NSMutableString alloc]init] ;
    [self.dataforserver setString:@""];
    
    for (i=0;i< self.dataArray.count; i++) {
    
        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.myurl.com/gprsin?action=%d&//subscriberid=%d&type=%@",2,111,type]];
    
        data =[NSString stringWithFormat:@"A%d%@",[[self.recordIDArray objectAtIndex:i]intValue], [self.dataArray objectAtIndex:i]];
        [self.dataforserver appendString:data];
    
        if ((i+1)%batchCount == 0 && i!=0 ) {
            NSString *response = @"";
            int j = 0;
    
            while (response == @"" && j<3 ) {
            //Using while loop is not necessary,I am using this because it was required to try three times till getting response.    
                ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
                [request setPostBody:[[NSMutableData alloc] initWithData:[dataforserver dataUsingEncoding:NSUTF8StringEncoding]]];
                [request setRequestMethod:@"POST"];                
                [request startSynchronous];
                NSError *error = [request error];
                if (!error) {
                    response = [request responseString];
                    NSLog(@"response is %@",response);                    
                    [dataforserver setString:@""];
                }
                else
                {
                    // unable to connect show alert
                    NSLog(@"there is some error coming and the error is:%@",error);
                    return;
                }
    
    
                if ([response isEqualToString:@"SUCCESS"]) {
    
    
                    for (int k = i-batchCount+1; k<=i; k++) {
    
                        [self storeContactInDB:[self.dataArray objectAtIndex:k]:[[self.recordIDArray objectAtIndex:k]intValue]];//if you want to store contacts in database along only after successfully sending it to server
    
                    }
    
                    type = @"INCREMENT";
    
                }
                else if ([response isEqualToString:@"FAIL"])
                {
                    //show alert 
                    return;
                }
                j++;
            }
        }
        if (dataforserver != @"" && i== self.dataArray.count-(self.dataArray.count%batchCount)   )
        {
            NSString *response = @"";
            int j = 0;
    
            while (response == @""  && j<3 ) {
    
                ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
                [request setPostBody:[[NSMutableData alloc] initWithData:[dataforserver dataUsingEncoding:NSUTF8StringEncoding]]];
                [request setRequestMethod:@"POST"];
                [request startSynchronous];
                NSError *error = [request error];
                if (!error) {
                    response = [request responseString];
                    NSLog(@"response is %@",response);
                }
    
                else
                {
                    // unable to connect show alert
                    NSLog(@"there is some error coming and the error is:%@",error);
                    return;
                }
                if ([response isEqualToString:@"SUCCESS"]) {
    
                    for (i = self.dataArray.count-(self.dataArray.count%batchCount); i<self.dataArray.count; i++) 
                    {
    
                        [self storeContactInDB:[self.dataArray objectAtIndex:i]:[[self.recordIDArray objectAtIndex:i]intValue]];
    
                    }
    
                    type = @"INCREMENT";
                }
                else if ([response isEqualToString:@"FAIL"])
                {
                    //show alert
                    return;
                }
                j++;
            }
        }
    }
    

    }