我是Objective-C的新手,我在一个应用程序中工作,我需要使用HTTP Post连接到Java的servlet。
我上网搜索了一下,发现了很多关于NSMutableURLRequest和NSURLConnection的信息。我做了一些测试,现在我可以发送和receiveStrings,但我需要做一些更改,我不知道我该怎么做。
我想使用字符串(完成)向我的Servlet发送一条消息,并且我想停止执行,直到收到来自Servlet的响应(这是我的问题)。我不能停止执行,我不知道该怎么做。
这是我的代码:
- (NSString *)sendPostRequest: (NSString*)stringToSend {
//URL en formato String
NSString *urlString = @"http://192.168.1.1:8080/Servlet/ListenerServlet";
//Armo el Body con los Datos a enviar
NSMutableString* requestBody = [[NSMutableString alloc] init];
[requestBody appendString:stringToSend];
//Creo el Request
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
//Creo el Objecto con la URL dentro
NSURL *url = [NSURL URLWithString: [NSString stringWithString:urlString]];
//Seteo la URL al Request
[request setURL:url];
//Armo los Datos a Enviar
NSString* requestBodyString = [NSString stringWithString:requestBody];
NSData *requestData = [NSData dataWithBytes: [requestBodyString UTF8String] length: [requestBodyString length]];
//Seteo el Metodo de Envio
[request setHTTPMethod: @"POST"];
//Seteo los Datos a Enviar
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
[request setHTTPBody: requestData];
//Creo la Conexion y automaticamente se envia
[[NSURLConnection alloc] initWithRequest:request delegate:self];
[requestBody release];
[request release];
return @"";
}有人能帮帮我吗?
感谢并为我糟糕的英语感到抱歉
发布于 2011-11-16 03:03:18
最后,我使用NSMutableURLRequest和NSURLConnection以及sendSynchronousRequest使其正常工作。
下面是使用的代码:
- (NSString*) sendPostRequest:(NSString *)stringToSend{
NSString *urlString = [self serverURL];
NSURL *url = [NSURL URLWithString: urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
//set headers
[request addValue:@"Content-Type" forHTTPHeaderField:@"application/x-www-form-urlencoded"];
[request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[stringToSend dataUsingEncoding:NSASCIIStringEncoding]];
[request setTimeoutInterval:90]; // set timeout for 90 seconds
NSURLResponse **response = NULL;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:response error:nil];
NSString *responseDataString = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];
NSLog(@"Response %@", responseDataString);
return responseDataString;}
发布于 2011-11-08 04:11:25
您正在尝试以同步方式使用异步应用程序接口(NSURLRequest)。使用委托模式使NSURLRequest在后台工作。您启动一个请求,当数据可用或连接完成时,该请求调用其委托上的委托方法。
你应该重新调整你的应用程序,这样它才能这样工作。网络操作可能需要很长时间,除非迫不得已,否则您不应该暂停用户的操作。
如果您必须停止您的应用程序,直到网络操作完成,您应该设置某种类型的停止/恢复功能来禁用您的UI,而不是占用主线程。
jbat100建议使用ASIHTTPRequest。它可能是过度杀伤力,也是异步工作的,并且已经被它的作者抛弃了。我想说的是,如果你需要使用网络库,你应该去看看AFNetworking。再说一次,可能是过度杀伤力,肯定是异步的,但积极维护并使用基于块的接口。
https://stackoverflow.com/questions/8041680
复制相似问题