Je reçois cette erreur alors que je faisais une requête réseau en utilisant la bibliothèque volley, j'ai suivi ces liens Android Volley - BasicNetwork.performRequest: code de réponse inattendu 400 et code de réponse inattendu 404 volley mais aucun d'entre eux ne fonctionne dans mon cas . Voici mon code de demande
StringRequest stringRequest = new StringRequest(Request.Method.POST,AppConstants.LOG_IN_API , new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("TAG", "Login Response: " + response.toString());
try {
JSONObject jsonObject = new JSONObject(response);
Log.v("USerid",""+jsonObject.getInt("userid"));
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
System.out.println("volley Error ................."+volleyError);
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Log.v("getparams","Is called");
Map<String, String> params = new HashMap<String, String>();
params.put(AppConstants.USER_ID, "[email protected]");
params.put(AppConstants.PASSWORD, "123456");
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json; charset=utf-8");
return headers;
}
};
Log.v("Request",""+stringRequest);
AppController.getInstance().addToRequestQueue(stringRequest);
}
Est-ce que quelqu'un peut me dire où je me trompe dans mon code? Toute aide est appréciable.
Généralement, cette réponse est provoquée par l'envoi de paramètres erronés avec l'URL. Vérifiez chaque paramètre avec l'orthographe et assurez-vous que la réponse est obtenue sous forme de chaîne ou d'objet. Vérifiez également le type de contenu.
J'espère que ceci vous aidera.
Je vous remercie.
Si GET fonctionne et que POST ne fonctionne pas, et que vous obtenez une réponse 404, cela signifie que votre demande de publication ne peut pas être acheminée par le serveur. J'ai eu le même problème et la solution était simple. J'ai créé mon serveur dans NodeJS et Je n'ai pas géré l'action POST pour mon URL . Je testais avec get et tout allait bien.
Ma méthode de test sur le serveur de noeud avec Express était:
app.get('/data/helloWorld', routeData.helloWorld);
Et bien sûr je devrais ajouter un itinéraire pour post-méthode .
app.post('/data/helloWorld', routeData.helloWorld);
Supprimer getHeaders()
a résolu le problème pour moi.
Essayez simplement votre api avec ce code et vérifiez la réponse.
StringRequest stringRequest = new StringRequest(Request.Method.POST, ApiURL.LOGIN_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("Response", response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Response", error.toString());
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("email", email.getText().toString());
params.put("password", password.getText().toString());
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("Content-Type", "application/x-www-form-urlencoded");
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
Il est probable que l'adresse IP locale dans stringRequest soit fausse. Veuillez vérifier. J'ai résolu mon problème en modifiant mon adresse IP.
Mon adresse IP était:
private static final String ROOT_URL="http://192.168.0.101/Android/functions";
public static final String URL_REGISTER = ROOT_URL+"/registerUser.php";
Où, plus tard, j'ai découvert qu'en collant cette adresse IP dans mon émulateur et mon navigateur, cela ne fonctionnait pas. J'ai été coincé dans ce problème pendant une journée. Ensuite, j'ai supprimé le dossier racine " Android " de l'IP et cela a fonctionné.
Donc, mon adresse IP est maintenant: (dossier Android supprimé dans la chaîne)
private static final String ROOT_URL="http://192.168.0.101/functions";
public static final String URL_REGISTER = ROOT_URL+"/registerUser.php";
Gardez simplement à l'esprit que l'adresse IP doit fonctionner à la fois dans le navigateur et dans l'émulateur. Si c'est le cas, utilisez cette adresse IP dans votre projet.