调用webservice时发生FileNotFoundException

你好,我已经超过了我最初的问题 。 我是一个总的机器人noob,这是我的第一个应用程序。 我正在Android模拟器上testing这个。 我尝试连接到一个.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(); 

Solutions Collecting From Web of "调用webservice时发生FileNotFoundException"

HttpURLConnection类是误导性的,它会为400或更高的HTTP错误代码抛出FileNotFoundException

所以它不一定是一个不正确的URL(404)它可能是400(坏请求),403(禁止),500(内部服务器错误)或其他。

使用getResponseCode方法来更精确地指示问题。

这是我遇到的同样的问题:如果您尝试从连接读取getInputStream(),HttpUrlConnection返回FileNotFoundException。
当状态码高于400时,应该使用getErrorStream()。

除此之外,请注意,成功状态代码不仅有200个,即使是201,204等也经常用作成功状态。

这是我如何去pipe理它的一个例子

 ... 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.... 

通过这种方式,您将能够在成功和错误的情况下获得所需的响应。

希望这可以帮助!

确保您可以从您的Web浏览器http://192.168.3.47/service.asmx访问此URL

并确保没有代理configuration您的网页浏览器,如果是这样configuration您的代码相应

尝试删除:

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

我在调用API时遇到了这个错误。 我意识到我错过了API密钥。 任何find这个线程的人都会遇到同样的问题,不要忘记在API调用中包含API密钥(如果API需要的话)。