无法在帖子中附加标题和帖子排在android

问题描述:

我正在使用排球库打网络服务。在这个图书馆,我需要附上标题张贴的请求,但我得到的错误,同时击中一个Web服务,即“onErrorResponse:空”无法在帖子中附加标题和帖子排在android

//代码,它

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

    }; 

//添加请求,请求队列 AppController.getInstance()。addToRequestQueue(jsonObjReq,tag_json_obj);

+0

你怎么知道错误是因为头? –

+0

尝试这种方式:而不是'JsonObjectRequest'使用'StringRequest'并且不在参数中添加'Content-Type'只传递需要值的参数。有时响应会出现在json字符串中,新手认为必须使用JSON,但它应该需要普通的'StringRequest'。 –

是否有必要使用凌空?您可以切换到Retrofit。因为它是最好和最快的网络库之一。

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

我以前1.5年使用此代码,但有送体内J =原始JSON,并完美地工作。请检查一次。

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

你的答案显示'StringRequest'而op是要求'JSONObjectRequest' –

+0

这不是你可以稍后将其转换为jsonobject的问题。 JsonObject responseObject = new JsonObject(stringResponse); –

这里是你如何可以添加标题到凌空POST请求:

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

希望这对你的作品