2009-07-06 2 views
2

Я разрабатываю приложение, которое подключается к удаленному веб-серверу и часто обменивается данными с веб-сервером. На первом экране моего приложения отображается экран входа в систему, который аутентифицирует пользователя.Как получить ответ от сервера для отправленного запроса

Я могу выполнить аутентификацию пользователя на веб-сервере, отправив запрос на сервер, но не смог получить ответ от сервера, чтобы отображать предупреждение о победе для пользователя на iphone. Ясно, я не получаю никакого ответа.

Сервер, который я использую, разработан в JAVA.

Я использую следующее, чтобы отправить запрос на сервер.

NSString *post = @"username="; 

post = [post stringByAppendingString:username]; 
post = [post stringByAppendingString:@"&password="]; 
post = [post stringByAppendingString:password]; 

NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; 

NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:[NSURL URLWithString:@"http://mysite.com/login.action?"]]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setHTTPBody:postData]; 
NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:request delegate:self]; 

И

- (void)connectionNSURLConnection *)connection didReceiveDataNSData *)data 
{ 
[receivedData appendData:data]; 
NSString *ReturnStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
NSLog(@"In \"didReceiveData()\" : receivedData = %@",receivedData); 
NSLog(@"Return String : %@", ReturnStr); 

} 

Эта функция никогда не вызывается.

Что я должен сделать, чтобы получить ответ на запрос, который я отправил?

Краткий сборник моих запросов: Пример: Логин экран, который проверяет пользователя в JAVA-сервере

  1. Я посылаю запрос, что я нахожусь в состоянии увидеть в консоли моего приложения сервера.
  2. Я не могу получить ответ на запрос.
  3. В каком формате должны быть отправлены данные ответа?

Может кто-нибудь помочь мне в получении этого сделать, направляя меня четкую картину обмена данными между приложением iPhone и сервлет Java ..

любого рода помощь очень ценится ..

заранее спасибо .. Venkat


Спасибо и ребята за ваш быстрый ответ .. Я выполнил эти три метода также. Но ответа от сервера нет. Можете ли вы мне рассказать о процессе разработки приложения LOGIN, которое связывается с сервером JAVA по запросам и ответам? Я застрял в общении.

Да, мой сервер получает запрос от iphone. Я могу видеть запрос, который отправляется на сервер.

Я не могу понять, как происходит обмен данными между приложением iphone и JAVA-сервером. Я новичок в этой разработке iphone.

ответ

0

вы должны убедиться, что сервер действительно получает запрос от iphone. простой скрипт php должен что-то вернуть.

<?php 

    echo print_r($_GET, true); 
    echo print_r($_POST, true); 
?> 

создать фиктивный приложение, которое делает запрос на сценарий и отображает ответ

1
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    [responseData setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [responseData appendData:data]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    NSString *failureMessage = [NSString stringWithFormat:@"Connection failed: %@", [error description]]; 
    NSLog(failureMessage); 

} 

TRY реализации этих трех методов, а также, вы можете получать сообщение об ошибке или нет ответа.Вы можете сказать, используя эти методы.

+0

Спасибо, ребята, за ваш быстрый ответ. Я также реализовал эти три метода. Но ответа от сервера нет. Можете ли вы рассказать мне о процессе разработки приложения LOGIN, которое взаимодействует с сервером JAVA по запросам и ответам? Я застрял в общении. – Venkat

+0

@Venkat: В приведенном выше коде u отправлен в ур вопрос, где r u с использованием NSURLConnection * conn; r u не получает никакого предупреждения «Unused Variable» conn? »? –

0

Я не уверен, что аутентификация вы ссылаетесь с LOGIN, но если сервер требует HTTP Auth, необходимо реализовать метод делегата

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge; 
0

Я использую следующий отправить запрос к серверу.

Код выглядит нормально, но где этот код и что происходит до и после кода, который вы нам показали? Это в обработчике нажатия кнопки? Это в фоновом потоке?

Для асинхронной нагрузки, которую вы используете для правильной работы, вам необходимо быть в потоке с циклом запуска по умолчанию, например. основной поток. И этот код должен возвращать управление циклу выполнения, то есть не должен ждать, делая что-то еще.

Еще одна вещь, которую нужно проверить, это ваш сервер - это на самом деле отправка ответа? Если вы отправляете тот же запрос из браузера, какую длину содержимого вы вернетесь?

Редактировать: это может помочь, если вы также покажете обработчик действия java на стороне сервера. Например, отправляет ли он переадресацию HTTP, если регистрация прошла успешно? И реализуете ли вы следующий метод делегата:

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse 

... и если да, то каким образом этот метод выглядит. Мне интересно, если вы, возможно, реализовали этот метод и не получили правильную логику там, таким образом, остановили переадресацию.

+0

Спасибо frankodwyer за то, что нашли время в поиске моего запроса. Мой код идет одним нажатием кнопки. Я не понял термины, асинхронную нагрузку и цикл цикла. Не могли бы вы объяснить мне подробно. Мой сервер получает запрос от моего приложения. Я могу увидеть мой запрос на консоли моего сервера. Нужно ли мне внедрять JSON в приложении iphone? – Venkat

+0

Если ваш код нажат кнопку, тогда вы должны быть в порядке, эти методы следует вызывать, если есть какие-либо данные, возвращаемые. Похоже, что ваш сервер действительно не отправляет какие-либо данные в ответ. И нет, вам не нужно реализовывать JSON или, по крайней мере, это не ваша проблема. После того, как вы решите эту проблему, вы можете захотеть взглянуть на формат JSON или plist для отправки вашего ответа (посмотрите другие вопросы о форматах, которые нужно использовать с приложением iphone, подключающимся к webapp) – frankodwyer

+0

У меня также такая же проблема. пожалуйста помогите..Я также использую java-сервер ... – Akshay

0

U может сделать это таким образом ...

-(NSString*)createWebServiveRequest:(NSString *)urlLink{ 
    NSURL *url = [NSURL URLWithString:urlLink]; 
    NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:60]; 
    NSData *returnData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse: nil error: nil ]; 
    NSString *responseString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 
    return responseString; 
} 

вызова выше метод с NSString содержащего URL ..... и захватить его в вызове метода.