web-dev-qa-db-fra.com

comment envoyer un objet json au serveur en utilisant volley dans android

Je souhaite envoyer l'objet JSONObject au serveur à l'aide de la méthode POST. J'ai utilisé la bibliothèque de volley pour faire passer les paramètres de chaîne, mais si j'essaie d'utiliser l'objet json, il affiche une erreur lors de l'appel de l'objet json. Voici mon code.

    private void makeJsonObjReq() {
    showProgressDialog();
    JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
            Const.URL_LOGIN, null,
            new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    Log.d(TAG, response.toString());
                    msgResponse.setText(response.toString());
                    hideProgressDialog();
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());
                    hideProgressDialog();
                }
            }) {

        /**
         * Passing some request headers
         * */
        @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;
        }

        @Override
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<String, String>();
            params.put("un", "[email protected]");
            params.put("p", "somepasswordhere");
            return params;
        }

    };

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(jsonObjReq,tag_json_obj);

    // Cancelling request
    // ApplicationController.getInstance().getRequestQueue().cancelAll(tag_json_obj);       
}

Et mon serveur de formulaire d'erreur est: [10031] BasicNetwork.performRequest: Unexpected response code 401

Comment résoudre ce problème. Je veux ajouter application/json;charset=utf-8 dans l'en-tête s'il vous plaît vérifier mon code si c'est correct ou non. S'il vous plaît me donner une suggestion pour surmonter ce problème

10
John

Le troisième paramètre de JsonObjectRequest sert à transmettre des paramètres de publication sous forme jsonobject. Et pour l'en-tête, vous devez envoyer deux valeurs distinctes, l'une pour le type de contenu, l'autre pour le jeu de caractères.

  RequestQueue queue = Volley.newRequestQueue(this);

  private void makeJsonObjReq() {
    showProgressDialog();


            Map<String, String> postParam= new HashMap<String, String>();
            postParam.put("un", "[email protected]");
            postParam.put("p", "somepasswordhere");


    JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
            Const.URL_LOGIN, new JSONObject(postParam),
            new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    Log.d(TAG, response.toString());
                    msgResponse.setText(response.toString());
                    hideProgressDialog();
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());
                    hideProgressDialog();
                }
            }) {

        /**
         * Passing some request headers
         * */
        @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;
        }



    };

    jsonObjReq.setTag(TAG);
    // Adding request to request queue
    queue.add(jsonObjReq);

    // Cancelling request
    /* if (queue!= null) {
    queue.cancelAll(TAG);
    } */

}
26
Pr38y

Créer une nouvelle méthode et l'appeler dans la méthode OnClick 

public void PostOperation() {
        requestQueue = Volley.newRequestQueue(this);
        pdialog = new ProgressDialog(this);
        pdialog.setMessage("Loading");
        pdialog.show();

        StringRequest stringRequest = new StringRequest(Request.Method.POST, "YOUR_URL",
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        pdialog.dismiss();
                        Log.e("login output", response);
//MODEL CLASS
                       LoginModel loginModel = new GsonBuilder().create().fromJson(response, LoginModel.class);


                        if (loginModel.getStatus().toString().equalsIgnoreCase("true")) {


                            Intent i = new Intent(context, DashboardActivity.class);
                            startActivity(i);
                            finish();

                            Toast.makeText(context, loginModel.getStatus() + "", Toast.LENGTH_SHORT).show();
                        } else {

                            Toast.makeText(context, loginModel.getMsg() + "", Toast.LENGTH_SHORT).show();

                        }

                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        pdialog.dismiss();
                        Toast.makeText(getApplicationContext(), "Invalid Credentials", Toast.LENGTH_SHORT).show();
                    }
                }) {
            @Override
            protected Map<String, String> getParams() {
                HashMap<String, String> map = new HashMap<String, String>();

              // pass your input text

                map.put("email" editTextEmail.getText().toString()); 
                map.put("password",editTextPassword.getText().toString() );

                map.put("uid", "1"); 
                map.put("type", "login");


                Log.e("para", map + "");
                return map;
            }

        };
        requestQueue.add(stringRequest);

    }
0
Karan Israni