web-dev-qa-db-fra.com

Code de réponse inattendu Android Volley BasicNetwork.performRequest () 404

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.

5
Sandeep dhiman

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.

4
Priya Darshani

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);
4
Daniel Więcek

Supprimer getHeaders() a résolu le problème pour moi.

1
M. Chavoshi

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);

}
0
Priya Darshani

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.

0
Devender Gupta