2017-08-31 6 views
1

Je suis en train de frapper un service web en utilisant la bibliothèque de volée. Dans cette bibliothèque que je dois joindre les en-têtes pour poster une demande mais je reçois une erreur tout en frappant un service Web-à-dire « onErrorResponse: null »Impossible de joindre l'en-tête avec la demande de poste en volée dans android

// code pour elle

 JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, 
      url, 
      new Response.Listener<JSONObject>() { 

       @Override 
       public void onResponse(JSONObject response) { 
        Log.e("response", response.toString()); 
        pDialog.hide(); 

       } 
      }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      VolleyLog.e("Error: " + error.getMessage()); 
      Toast.makeText(getActivity(), R.string.txt_error_occured, Toast.LENGTH_LONG).show(); 
      pDialog.hide(); 
     } 
    }) { 

     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("policyNo", policyNo); 
      return params; 
     } 

     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String, String> params = new HashMap<String, String>(); 
      params.put("Content-Type", "application/x-www-form-urlencoded"); 
      params.put("Content-Type", "application/json; charset=utf-8"); 
      params.put("User-agent", "My useragent"); 
      return params; 
     } 

    }; 

// Ajout d'une requête à une file d'attente AppController.getInstance(). addToRequestQueue (jsonObjReq, tag_json_obj);

+0

comment savez-vous que l'erreur est parce que des en-têtes? –

+0

Essayez de cette façon: Au lieu de 'JsonObjectRequest', utilisez' StringRequest' et n'ajoutez pas 'Content-Type' dans les paramètres seulement, passez les paramètres qui nécessitent des valeurs. Parfois, la réponse vient en chaîne de JSON, newbie pense qu'il faut utiliser JSON mais il devrait normalement exiger 'StringRequest'. –

Répondre

0

Est-il nécessaire d'utiliser volley? Vous pouvez passer à Retrofit plutôt. Comme c'est l'une des meilleures bibliothèques de réseautage.

https://futurestud.io/tutorials/retrofit-add-custom-request-header

J'avais utilisé ce code de 1,5 ans avant, mais a envoyer j = JSON intérieur brut corps et fonctionnait parfaitement. S'il vous plaît vérifier cela une fois.

public void updateUserData(final String jsonObject) { 
     // Tag used to cancel the request 
     showProgressDialog(); 
     String tag_string_req = "string_req"; 
     String url = Const.UPDATE_USER_HISTORY; 


     final StringRequest strReq = new StringRequest(Request.Method.POST, 
       url, new Response.Listener<String>() { 

      @Override 
      public void onResponse(String response) { 
       hideProgressDialog(); 
       Log.d(TAG, response.toString()); 

       FragmentManager fm = getActivity().getSupportFragmentManager(); 
       FragmentTransaction transaction = fm.beginTransaction(); 
       if (offer) { 
        Intent intent = new Intent(getActivity(), TabsActivity.class); 
        getActivity().startActivity(intent); 
        getActivity().finish(); 
       } else { 
        fm.popBackStack("quiz2", FragmentManager.POP_BACK_STACK_INCLUSIVE); 
        fm.popBackStack("quiz1", FragmentManager.POP_BACK_STACK_INCLUSIVE); 
        fm.popBackStack("app", FragmentManager.POP_BACK_STACK_INCLUSIVE); 
       } 
//    transaction.commit(); 
      } 
     }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       hideProgressDialog(); 
      } 
     }) { 
      @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       Map<String, String> header = new HashMap<>(); 
       header.put("Content-Type", "application/json; charset=utf-8"); 
       return header; 
      } 


      @Override 
      public String getBodyContentType() { 
       return "application/json; charset=utf-8"; 
      } 

      @Override 
      public byte[] getBody() throws AuthFailureError { 
       try { 
        return jsonObject.getBytes("utf-8"); 
       } catch (UnsupportedEncodingException e) { 
        e.printStackTrace(); 
       } 
       return null; 
      } 

     }; 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(strReq, tag_string_req); 
    } 
+0

Votre réponse montre 'StringRequest' alors que op demande' JSONObjectRequest' –

+0

Ce n'est pas le problème que vous pouvez convertir en jsonobject plus tard. JsonObject responseObject = new JsonObject (stringResponse); –

0

Voici comment vous pouvez ajouter des en-têtes à une demande Publier Volley:

final HashMap<String, Object> postParams = new HashMap<String, Object>(); 
postParams.put("KEY_1", "VAL_1"); 
postParams.put("KEY_2", "VAL_2"); 

JsonObjectRequest mRequestEkyc = new JsonObjectRequest(Request.Method.POST, 
     "your_url_comes_here", new JSONObject(postParams), 
     new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       DisplayUtils.dismissDialog(mContext); 
       //parseResponse(response); 
      } 
     }, new Response.ErrorListener() { 

    @Override 
    public void onErrorResponse(VolleyError error) { 
     DisplayUtils.dismissDialog(mContext); 
     DisplayUtils.displayToast(mContext, error.getMessage()); 
    } 
}) { 
    /** 
    * Passing request headers 
    * */ 
    @Override 
    public Map<String, String> getHeaders() throws AuthFailureError { 
     HashMap<String, String> headers = new HashMap<String, String>(); 
     headers.put("KEY_1", "VAL_1"); 
     return headers; 
    } 

}; 


final int timeoutMilliseconds = 300000; 
mRequestEkyc.setRetryPolicy(new DefaultRetryPolicy(timeoutMilliseconds, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
ApplicationController.getInstance().addToRequestQueue(mRequestEkyc); 

espère que cela fonctionne pour vous