2009-07-06 13 views
2

リモートWebサーバーに接続し、Webサーバーと頻繁にデータを交換するアプリケーションを開発しています。私のアプリケーションの最初の画面は、ユーザーを認証するログイン画面を提供します。送信されたリクエストに対してサーバーからの応答を取得する方法

サーバーにリクエストを送信することでWebサーバー上のユーザーを認証できましたが、サーバーからの応答を得られず、ユーザーに成功のアラートを表示することができませんでした。明らかに、私は何の反応も得ていない。

私が使用しているサーバーは、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サーブレット間のデータ交換を明確に私を導くことによって行われ得ることに

はるかに高く評価されているヘルプの任意の並べ替えを...私を助けることができる

ヴェンカト


をuあなたの迅速な対応のためのみんなに感謝事前に感謝を.. ..私はまた、これらの3つのメソッドを実装しました。しかし、サーバーからの応答はありません。リクエストとレスポンスでJAVAサーバーと通信するLOGINアプリケーションを開発するプロセスをガイドできますか?私はコミュニケーションに悩まされています。

ええ、サーバーが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); 

} 

エラーまたは無応答を取得される可能性があります、同様にこれらの3つのメソッドを実装してみを表示するダミーのアプリを作成します。これらの方法を使って知ることができます。

+0

あなたのクイックレスポンスに感謝します.. 私はこれら3つの方法も実装しました。しかし、サーバーからの応答はありません。 要求と応答によってJAVAサーバーと通信するLOGINアプリケーションを開発するプロセスをガイドできますか? 私はコミュニケーションに悩まされています。 – Venkat

+0

@Venkat:上記のコードでは、あなたはNSURLConnection * connを使ってどこに質問するのですか?何も警告が出ない "未使用の変数 'c​​onn'"? –

0

私はあなたがLOGINと呼ぶものの認証わからないんだけど、サーバはHTTP認証を必要とする場合、あなたはデリゲートメソッド

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

を実装する必要があり、私がリクエストを送信するために、次を使用していますサーバーに転送します。

コードは正常ですが、このコードはどこにありますか、私たちに示したコードの前後にはどうなりますか?ボタンプレスのハンドラにありますか?それはバックグラウンドスレッドですか?

正常に動作するために使用している非同期ロードの場合、デフォルトの実行ループを持つスレッド上に存在する必要があります。メインスレッドそして、このコードは実行ループに制御を戻さなければならない。

もう1つ確認するのはサーバーです。実際には応答を送信していますか?ブラウザから同じリクエストを送信した場合、どのコンテンツの長さに戻るのですか?

編集:サーバ側でもJavaアクションハンドラを表示すると役立ちます。たとえば、ログインに成功した場合はHTTPリダイレクトを送信しますか?

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

を...そしてもしそうであれば、どのようにそのメソッドに見えるん:そして、あなたは、次のデリゲートメソッドを実装しています。私はあなたがこのメソッドを実装していて、そこに適切なロジックを持っていないのではないかと考えています。

+0

私のクエリを見て時間を取ってくれてありがとうfrankodwyer。 ボタンをクリックするとコードが表示されます。 私は、非同期のロードと実行ループという用語を理解できませんでした。私を詳細に説明してください。 私のサーバーは自分のアプリケーションからリクエストを受け取りました。サーバーのコンソールでリクエストを見ることができます。私はiphoneアプリケーションでJSONを実装する必要がありますか? – Venkat

+0

ボタンがクリックされた状態でコードがOKならば、戻ってくるデータがあればこれらのメソッドを呼び出す必要があります。あなたのサーバーが本当に応答のデータを送信していない可能性が高いと思われます。そして、いいえ、JSONを実装する必要はありません。少なくとも、ここでは問題はありません。この問題を解決したら、あなたのレスポンスを送信するためのJSONまたはplist形式を調べることができます(Webアプリケーションに接続するiphoneアプリで使用する他の形式の質問を参照してください) – 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で上記のメソッドを呼び出す.....とメソッド呼び出しでそれをキャプチャします。

関連する問題