我希望批量发送到服务器上的数据。 我必须一次发送带有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编程的新手。请帮忙
答案 0 :(得分: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++;
}
}
}
}