0

サーバー上のデータにバッチで送信したい。一度に25文字列のnsmutablestringデータを送信してから応答を取得し、応答が成功した場合は次のバッチを再度送信する必要があります。HTTPConnectionクラスを使用しています。使用しているコードは次のとおりです。

    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];
     }   

次の方法で応答があります

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

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


    }

「SUCCESS」という応答が返ってきた場合にのみ、ループを続行したいと思います。誰かがそれを達成する方法を提案できますか?私はiOSプログラミングにとても慣れていません。助けてください

4

1 に答える 1

0

github で入手できる ASIHttpRequest クラスを使用して、この問題を解決しました。誰かが同じ問題を抱えている場合に使用したコードを投稿しています

{
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++;
        }
    }
}

}

于 2012-11-08T10:00:54.073 に答える