Bonjour, j'ai passé mon initial problème . Je suis un noob total Android, ceci est ma première application. Je teste cela sur l'émulateur Android. J'essaie de me connecter à un service Web .NET à http://192.168.3.47/service.asmx
. Je reçois une FileNotFoundException
. Mais il IS, l'URL est correcte. Comment puis-je lui faire voir ça?
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)
Cela se passe ici: 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();
La classe HttpURLConnection
est trompeuse dans la mesure où elle lancera une FileNotFoundException
pour tout code d'erreur HTTP de 400 ou plus.
Donc, ce n'est pas nécessairement une URL incorrecte (404), il peut s'agir de 400 (demande incorrecte), 403 (interdit), 500 (erreur de serveur interne) ou autre chose.
Utilisez la méthode getResponseCode
pour obtenir une indication plus précise du problème.
C'est le même problème que j'avais: HttpUrlConnection renvoie FileNotFoundException si vous essayez de lire la méthode getInputStream ().
Vous devriez plutôt utiliser getErrorStream () lorsque le code de statut est supérieur à 400.
Mieux que cela, soyez prudent, car le code d'état de réussite n'est pas seulement 200, même les codes 201, 204, etc. sont souvent utilisés comme états de réussite.
Voici un exemple de la façon dont je suis allé le gérer
... 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....
De cette manière, vous pourrez obtenir la réponse nécessaire dans les cas de réussite et d'erreur.
J'espère que cela t'aides!
Essayez de supprimer:
connection.setDoInput(true);
connection.setDoOutput(true);
Assurez-vous que vous pouvez accéder à cette URL à partir de votre navigateur Web http://192.168.3.47/service.asmx
et assurez-vous qu’aucun proxy n’est configuré avec votre navigateur Web; si tel est le cas, configurez votre code en conséquence
J'ai eu cette erreur lors de l'appel de l'API. J'ai réalisé qu'il me manquait la clé API. Quiconque trouve ce fil pour le même problème, n'oubliez pas d'inclure la clé API dans l'appel API, si cela est requis par l'API.