web-dev-qa-db-fra.com

Comment utiliser POST request in Android Volley library with params and header?

J'essaie d'apprendre la bibliothèque Volley pour publier des données dans des services Web. J'ai besoin d'implémenter le formulaire d'enregistrement d'utilisateur, voici l'image du facteur avec les paramètres et l'en-tête ... postman screen for post request

maintenant le problème est, j'obtiens en dessous de l'erreur

com.Android.volley.ServerError

c'est mon code pour la méthode du poste de volley.

public void postNewComment(){
    try {
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        String URL = "http://myurl/api/users";
        JSONObject jsonBody = new JSONObject();
        jsonBody.put("email", "[email protected]");
        jsonBody.put("user_type", "C");
        jsonBody.put("company_id", "0");
        jsonBody.put("status", "A");
        jsonBody.put("password", "123456");

        final String requestBody = jsonBody.toString();

        StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.i("VOLLEY", response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
                Log.e("VOLLEY", error.toString());
            }
        }) {
            @Override
            public String getBodyContentType() {
                return "application/json; charset=utf-8";
            }

            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                final Map<String, String> headers = new HashMap<>();
                headers.put("Authorization", "Basic " + "My_auth_key");
                headers.put("Content-Type", "application/json");

                return headers;
            }

            @Override
            protected Response<String> parseNetworkResponse(NetworkResponse response) {
                String responseString = "";
                if (response != null) {
                    responseString = String.valueOf(response.statusCode);
                    // can get more details such as response.headers
                }
                return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
            }
        };

        requestQueue.add(stringRequest);
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

veuillez suggérer où je me trompe. L'URL fonctionne correctement avec le facteur, également comme vous pouvez le voir, je dois définir 2 en-têtes. J'ai également essayé cette méthode de publication d'URL avec AsyncTask et son bon fonctionnement. Maintenant, je dois implémenter cela en utilisant la bibliothèque de volley. veuillez suggérer. Merci.

c'est mon erreur logcat:

E/Volley: [81910] BasicNetwork.performRequest: code de réponse inattendu 405 pour "Myurl"

5
parag Kartpay

**Essaye celui-là **

    private void sendWorkPostRequest() {

        try {
            String URL = "";
            JSONObject jsonBody = new JSONObject();

            jsonBody.put("email", "[email protected]");
            jsonBody.put("password", "");
            jsonBody.put("user_type", "");
            jsonBody.put("company_id", "");
            jsonBody.put("status", "");

            JsonObjectRequest jsonOblect = new JsonObjectRequest(Request.Method.POST, URL, jsonBody, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {

                    Toast.makeText(getApplicationContext(), "Response:  " + response.toString(), Toast.LENGTH_SHORT).show();
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                    onBackPressed();

                }
            }) {
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    final Map<String, String> headers = new HashMap<>();
                    headers.put("Authorization", "Basic " + "c2FnYXJAa2FydHBheS5jb206cnMwM2UxQUp5RnQzNkQ5NDBxbjNmUDgzNVE3STAyNzI=");//put your token here
                    return headers;
                }
            };
            VolleyApplication.getInstance().addToRequestQueue(jsonOblect);

        } catch (JSONException e) {
            e.printStackTrace();
        }
        // Toast.makeText(getApplicationContext(), "done", Toast.LENGTH_LONG).show();

    }
}
13
Harshal Deshmukh

J'ai une réponse alternative qui fonctionne plutôt bien pour Android Volley + bibliothèque par dworks et Google: voir ICI

1
larrytech