2016-08-05 9 views
-1

デバッグのために私を正しい軌道に乗せることができるかどうか疑問に思っていました。私はアンドロイドデバイスに文字列レスポンスを返すと仮定しているサーバーへのhttp呼び出しを行っているアンドロイドデバイスがあります。ブラウザでhttpコールを行うと、httpが動作しています。私は私のアンドロイドアプリで "ファイルが見つかりません例外"を返します。サーバーへのhttp呼び出しはブラウザで動作しますが、アンドロイドで応答コード500が返され、ファイルが見つかりませんでした。

Androidデバイスの応答コードを取得するとサーバーから500(内部サーバーエラー)が返されますが、httpコールはブラウザで動作します。

私のサーバーは、サーブレットとTomcatサーバーの動作(Javaクラスとマシンコードに変換)に変換し、結果のHTMLコードを生成してブラウザに戻すJSPページでhttp要求を受け取ります。

私は非常にサーバーに新しいので、ブラウザですべてが動作するときにアンドロイドのエラーを引き起こす可能性が私のサーバーで起こっているものをデバッグする方法を知りません。

これを引き起こしている可能性のある問題は何ですか?また、どのようにデバッグを開始できますか?ここで

は別のスレッドで実行されているAndroidのでHTTP呼び出しを行うための私のコードです:

URL url = new URL(uri); 
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
urlConnection.setRequestMethod("GET"); 
urlConnection.setDoOutput(true); 
urlConnection.setRequestProperty("Content-Type", "text/plain; charset=utf-8"); 
urlConnection.setRequestProperty("Expect", "100-continue"); 
urlConnection.connect(); 

int responseCode = urlConnection.getResponseCode(); //can call this instead of con.connect() 
if (responseCode >= 500 && responseCode <= 599) { 

    throw new Exception("Response Code from Server: " + responseCode); 

    } 

else { 

    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
    result = ""; 
    String inLine; 


    while ((inLine = in.readLine()) != null) { 
     result += inLine; 
    } 

    in.close(); 

    Log.d("MainActivity", "IP Address is: " + result); 

    } 
+0

「ファイルが見つかりません」という例外が表示される場所を特定することはできますか?これはサーバーの例外なので、クライアント側で500のエラーが発生しますか?その場合、問題が何であるかを知っています。アプリケーションが存在しないファイル名を要求し、サーバーがクラッシュすることがあります。 404エラーでこれを処理するようにサーバーを修正し、クライアントに適切なファイル名を渡すようにしてください。 – BladeCoder

+0

@BladeCoderはい、ファイルが見つかりませんでした例外は、私のアンドロイドログcatでスローされますが、見つからないファイルは、サーバー上のサーブレットに接続するファイルです。私はこれを調べます... – Natalie

答えて

0

は、おそらくあなたは、localhostまたは127.0.0.1に接続しようとしています。

これはブラウザ(デスクトップ)での使用に適していますが、モバイルアプリケーションの場合は10.0.2.2を代わりに使用する必要があります。

Retrofitを使用して、数行でHTTP要求を実行することができます。

urlConnection.setRequestProperty("Content-Type", "text/plain; charset=utf-8"); 
urlConnection.setRequestProperty("Expect", "100-continue"); 

それはあなたが同時にリクエストボディを送信していない場合は、これらを使用することが無効です:

+0

ローカルホストに接続しようとしたときにタイムアウト例外が発生しました。 –

0

は、これらの2行を削除してください。単純なGETリクエストを実行したいだけです。

+0

残念ながら、これら2行を削除してもまだ動作しません。私はまだサーバーから同じ500応答コードを取得します。 – Natalie

+0

5xxエラーはサーバー側のエラーを意味します(4xxはクライアント側にあります)。何が問題になったのかを知るためにサーバログをチェックしてください。たぶん、サーバーがいくつかのヘッダーを設定するか、サーバーをバグに陥らせる特定のURLを呼び出していると考えられます。 – BladeCoder

+0

また、URLでは、URLEncoderを使用してURL有効でない文字を含む可能性のあるすべてのパラメータを適切にURLエンコードするようにしてください。 – BladeCoder

関連する問題