Android Volley - BasicNetwork.performRequest: code de réponse inattendu 400
Énoncé du problème:
Je suis en train d'essayer d'accéder à une API REST qui retournera un objet JSON pour les divers codes d'état HTTP (400, 403, 200, etc) à l'aide de Volley.
Pour toute HTTP statut autre que de 200, il semble que la "réponse Inattendue code de 400' est un problème. Quelqu'un aurait-il un moyen de contourner cette "erreur"?
Code:
protected void getLogin() {
final String mURL = "https://somesite.com/api/login";
EditText username = (EditText) findViewById(R.id.username);
EditText password = (EditText) findViewById(R.id.password);
//Post params to be sent to the server
HashMap<String, String> params = new HashMap<String, String>();
params.put("username", username.getText().toString());
params.put("password", password.getText().toString());
JsonObjectRequest req = new JsonObjectRequest(mURL, new JSONObject(
params), new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONObject obj = response
.getJSONObject("some_json_obj");
Log.w("myApp",
"status code..." + obj.getString("name"));
//VolleyLog.v("Response:%n %s", response.toString(4));
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.w("error in response", "Error: " + error.getMessage());
}
});
//add the request object to the queue to be executed
AppController.getInstance().addToRequestQueue(req);
}
source d'informationauteur clearstake
Vous devez vous connecter pour publier un commentaire.
Une façon de le faire sans changer
Volley
code source consiste à vérifier les données de réponse dans leVolleyError
et l'analyse de votre auto.De
f605da3 commit
Volley
jette unServerError
exception qui contient le raw de réponse du réseau.De sorte que vous pouvez faire quelque chose de semblable à cela dans votre erreur auditeur:
Pour l'avenir, si
Volley
changements, on peut suivre l'approche ci-dessus où vous avez besoin de vérifier laVolleyError
pour les données brutes qui ont été envoyées par le serveur et l'analyse.J'espère qu'ils mettent en œuvre que
TODO
mentionné dans la fichier source.Vous avez besoin d'ajouter du Contenu-Type de l'en-tête.
...
Moi aussi eu la même erreur, mais dans mon cas, j'ai été appeler url avec des espaces vides.
Puis, je l'ai fixée par l'analyse comme ci-dessous.
dans mon cas, je n'écrivais pas reg_url avec :8080 .
Chaîne reg_url = "http://192.168.29.163:8080/register.php";
Vous dire que veulent obtenir les codes d'état?
VolleyError
a une variable membre de type deNetworkResponse
et c'est public.Vous pouvez accéder à
error.networkResponse.statusCode
pour le code d'erreur http.J'espère que c'est utile pour vous.
Juste de mettre à jour à tous, après quelques délibérations, j'ai décidé d'utiliser Asynchrone Client Http au lieu de résoudre mon problème. La bibliothèque permet à un plus propre approche (pour moi) pour manipuler les réponses HTTP surtout dans les cas où les objets JSON sont retournés dans tous les scénarios/HTTP statuts.
Ce que j'ai fait a été d'ajouter un extra '/' pour mon url, par exemple:
à