web-dev-qa-db-de.com

Android Volley BasicNetwork.performRequest () unerwarteter Antwortcode 404

Ich erhalte diesen Fehler, während ich eine Netzwerkanfrage mit der Volleybibliothek machte. Ich habe folgende Links verfolgt: Android Volley - BasicNetwork.performRequest: Unerwarteter Antwortcode 400 und Unerwarteter Antwortcode 404 Volley , aber keiner von ihnen funktioniert mein Fall . Hier ist mein Anforderungscode 

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

    }

Gibt es jemanden, der mir sagen kann, wo ich falsch in meinem Code bin? Jede Hilfe ist spürbar.

5
Sandeep dhiman

Im Allgemeinen wird diese Antwort durch das Senden falscher Parameter mit der URL verursacht. Bitte überprüfen Sie jeden Parameter mit Rechtschreibung und vergewissern Sie sich, ob die Antwort in Zeichenfolge oder in Objekt erfolgt. Überprüfen Sie auch den Inhaltstyp.

Hoffe, das wird dir helfen.
Vielen Dank.

4
Priya Darshani

Wenn GET funktioniert und POST nicht ist und Sie eine 404-Antwort erhalten, bedeutet dies, dass Ihre Post-Anfrage nicht vom Server weitergeleitet werden kann. Ich hatte das gleiche Problem und die Lösung war einfach. Ich habe meinen Server in NodeJS erstellt und ich habe die POST -Aktion für meine URL nicht erledigt . Ich habe es mit get getestet und alles war gut.

Meine Testmethode auf dem Knotenserver mit Express war:

app.get('/data/helloWorld', routeData.helloWorld);

Und natürlich ich sollte eine Route für die Post-Methode hinzufügen .

app.post('/data/helloWorld', routeData.helloWorld);
4
Daniel Więcek

Das Entfernen von getHeaders() hat das Problem für mich gelöst.

1
M. Chavoshi

Testen Sie Ihr API einfach mit diesem Code und überprüfen Sie die Antwort.

 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

Wahrscheinlich ist die lokale IP-Adresse in der ZeichenfolgeAnfrage falsch. Bitte überprüfen Sie die Angaben.

Meine IP war:

private static final String ROOT_URL="http://192.168.0.101/Android/functions";
public static final String URL_REGISTER = ROOT_URL+"/registerUser.php";

Wo ich später herausfand, dass ich diese IP in meinen Emulator und meinen Browser eingefügt habe, funktionierte es nicht. Ich war für einen Tag in diesem Problem gefangen. Dann entfernte ich den Stammordner " Android " von der IP und es funktionierte.

Also meine IP ist jetzt: (Android-Ordner in der Zeichenfolge entfernt)

private static final String ROOT_URL="http://192.168.0.101/functions";
public static final String URL_REGISTER = ROOT_URL+"/registerUser.php";

Denken Sie daran, dass die IP sowohl im Browser als auch im Emulator funktionieren muss. Wenn dies der Fall ist, verwenden Sie diese IP in Ihrem Projekt.

0
Devender Gupta