21

こんにちは、最初の問題を乗り越えました。私は完全なアンドロイド初心者です。これは私の最初のアプリです。これを Android エミュレーターでテストしています。で .NET Web サービスに接続しようとしていますhttp://192.168.3.47/service.asmx。を取得しFileNotFoundExceptionます。しかし、そこにあります。URLは正しいです。どうすれば彼にそれを見せることができますか?


03-03 11:23:49.741: WARN/System.err(455): java.io.FileNotFoundException: http://192.168.3.47/service.asmx
03-03 11:23:49.751: WARN/System.err(455):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:521)
03-03 11:23:49.801: WARN/System.err(455):     at gyozo.HelloWorld.HelloActivity.onClick(HelloActivity.java:62)
03-03 11:23:49.831: WARN/System.err(455):     at android.view.View.performClick(View.java:2485)
03-03 11:23:49.851: WARN/System.err(455):     at android.view.View$PerformClick.run(View.java:9080)
03-03 11:23:49.871: WARN/System.err(455):     at android.os.Handler.handleCallback(Handler.java:587)
03-03 11:23:49.910: WARN/System.err(455):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-03 11:23:49.940: WARN/System.err(455):     at android.os.Looper.loop(Looper.java:123)
03-03 11:23:49.950: WARN/System.err(455):     at android.app.ActivityThread.main(ActivityThread.java:3683)
03-03 11:23:50.010: WARN/System.err(455):     at java.lang.reflect.Method.invokeNative(Native Method)
03-03 11:23:50.050: WARN/System.err(455):     at java.lang.reflect.Method.invoke(Method.java:507)
03-03 11:23:50.070: WARN/System.err(455):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-03 11:23:50.090: WARN/System.err(455):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-03 11:23:50.110: WARN/System.err(455):     at dalvik.system.NativeStart.main(Native Method)

これはここで起こります:InputStream is = connection.getInputStream();


URL url = new URL("http://192.168.3.47/service.asmx");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", 
 "application/soap+xml; charset=utf-8");

connection.setUseCaches(false);
connection.setDoInput(true);
connection.setDoOutput(true);

String soapRequest = String.format(getText(R.string.ws_listemain_ds_new).toString(), city, keyword);
connection.setRequestProperty("Content-Length", Integer.toString(soapRequest.getBytes("UTF-8").length));
//Send request
OutputStreamWriter owr = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");

owr.write(soapRequest);
owr.flush();
owr.close();

//Get Response  
InputStream is = connection.getInputStream();
4

5 に答える 5

62

このクラスは、400 以上の HTTP エラー コードに対してHttpURLConnectionをスローするという点で誤解を招きます。FileNotFoundException

したがって、必ずしも間違った URL (404) であるとは限りません。400 (不正な要求)、403 (禁止)、500 (内部サーバー エラー) などの可能性があります。

この方法を使用してgetResponseCode、問題をより正確に把握します。

于 2011-03-03T11:31:31.307 に答える
17

これは私が抱えていたのと同じ問題です。接続から getInputStream() を読み取ろうとすると、HttpUrlConnection は FileNotFoundException を返します。
ステータス コードが 400 より大きい場合は、代わりに getErrorStream() を使用する必要があります。

これ以上、成功ステータスコードは200だけではなく、201、204なども成功ステータスとして使われることが多いので注意してください。

これが私がそれを管理する方法の例です

... connection code code code ...

// Get the response code 
int statusCode = connection.getResponseCode();

InputStream is = null;

if (statusCode >= 200 && statusCode < 400) {
   // Create an InputStream in order to extract the response object
   is = connection.getInputStream();
}
else {
   is = connection.getErrorStream();
}

... callback/response to your handler....

このようにして、成功とエラーの両方のケースで必要な応答を得ることができます。

お役に立てれば!

于 2015-06-29T18:26:34.703 に答える
4

削除してみてください:

connection.setDoInput(true);
connection.setDoOutput(true);
于 2012-07-23T09:32:38.870 に答える
2

Web ブラウザからこの URL にアクセスできることを確認してくださいhttp://192.168.3.47/service.asmx

Webブラウザでプロキシが構成されていないことを確認してください。その場合は、それに応じてコードを構成してください

于 2011-03-03T09:43:49.390 に答える