Je développe une application de connexion simple. Mais je suis coincé au point où je reçois FileNotFoundException
lors de l'appel (ou la frappe) API en utilisant Android Asynctask
. Le code d'état que j'ai obtenu après avoir appelé est également 400. Mais je ne comprends pas où j'ai mal tourné. Voici le code de l'API appelante de la méthode doInBackground de asynctask.FileNotFoundException lors de l'appel de l'API RESTFul à l'aide de AsyncTask
@Override
protected JSONObject doInBackground(String... params) {
HttpURLConnection urlConnection = null;
BufferedWriter writer = null;
OutputStream out = null;
try
{
String email = params[0];
String password = params[1];
URL url = new URL("http://192.168.1.67:8080/eye/api/login");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(10000);
urlConnection.setReadTimeout(10000);
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
urlConnection.setRequestMethod("POST");
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
urlConnection.setRequestProperty("Accept", "application/json");
List<NameValuePair> loginCredentials = new ArrayList<>();
loginCredentials.add(new BasicNameValuePair("username", email));
loginCredentials.add(new BasicNameValuePair("password", password));
out = urlConnection.getOutputStream();
writer = new BufferedWriter(
new OutputStreamWriter(out, "UTF-8"));
writer.write(getQuery(loginCredentials));
writer.flush();
int statusCode = urlConnection.getResponseCode();
if (statusCode != HttpURLConnection.HTTP_OK)
{
Log.d("LoginActivity", "Connection failed: StatusCode: " + statusCode);
}
else
{
Log.d("LoginActivity", "Connection Success: StatusCode: " + statusCode);
}
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
responseText = getResponseText(in);
return new JSONObject(responseText);
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
P.S. : - getQuery() est la fonction qui va ajouter & encoder les paramètres d'URL.Et getResponseText() est la fonction qui lit la réponse qui vient du serveur. Juste pour info, le contrôle d'exécution entre dans le bloc catch après la ligne InputStream in = new BufferedInputStream(urlConnection.getInputStream());
De plus, si j'atteins cette URL particulière via Postman, j'obtiens 200 (HTTP OK) comme code de réponse.
C'est ce que les états du journal des erreurs:
12-15 16:24:07.028 26145-26182/krixi.com.spanpumploginhit W/System.err﹕ java.io.FileNotFoundException: http://192.168.1.67:8080/eye/api/login
12-15 16:24:07.029 26145-26182/krixi.com.spanpumploginhit W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:206)
12-15 16:24:07.029 26145-26182/krixi.com.spanpumploginhit W/System.err﹕ at krixi.com.spanpumploginhit.Login$AsyncCheckLogin.doInBackground(Login.java:213)
12-15 16:24:07.029 26145-26182/krixi.com.spanpumploginhit W/System.err﹕ at krixi.com.spanpumploginhit.Login$AsyncCheckLogin.doInBackground(Login.java:153)
12-15 16:24:07.029 26145-26182/krixi.com.spanpumploginhit W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:292)
12-15 16:24:07.029 26145-26182/krixi.com.spanpumploginhit W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-15 16:24:07.029 26145-26182/krixi.com.spanpumploginhit W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
12-15 16:24:07.029 26145-26182/krixi.com.spanpumploginhit W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-15 16:24:07.029 26145-26182/krixi.com.spanpumploginhit W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-15 16:24:07.029 26145-26182/krixi.com.spanpumploginhit W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
Merci :-)
Postez votre journal des erreurs. –
@DevendraSingh posté ... –
Assurez-vous d'abord que le serveur fonctionne correctement en utilisant [Postman] (https://www.getpostman.com) ou en utilisant ** CURL **. –