如何发送请求标题是“内容类型”:“应用程序/ json”在排球时获取

我尝试在Volley上使用GET,但我需要向application/json发送请求。

我看了一些答案,我尝试使用jsonBody ,但它显示错误:

null com.android.volley.ServerError

这是我的代码:

 public class MainActivity extends AppCompatActivity { String url = "http://114.35.246.42:2212/MobileApp/DEST_WebService.asmx/GetNews"; JSONObject jsonBody; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { //I try to use this for send Header is application/json jsonBody = new JSONObject("{\"type\":\"example\"}"); } catch (JSONException ex) { ex.printStackTrace(); } RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext()); JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, jsonBody, new Response.Listener() { @Override public void onResponse(JSONObject response) { Log.d("TAG", response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("TAG", error.getMessage(), error); } }); mQueue.add(jsonObjectRequest); } } 

是否有人可以教我如何解决这个问题,任何帮助将不胜感激。

这是我的url: String url = "http://114.35.246.42:2212/MobileApp/DEST_WebService.asmx/GetNews";

 @Override public Map getHeaders() throws AuthFailureError { Map params = new HashMap(); params.put("Content-Type", "application/json"); return params; } 

在你的实施

 public class MainActivity extends AppCompatActivity { String url = "http://114.35.246.42:2212/MobileApp/DEST_WebService.asmx/GetNews"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext()); JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, jsonBody, new Response.Listener() { @Override public void onResponse(JSONObject response) { Log.d("TAG", response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("TAG", error.getMessage(), error); } }) { //no semicolon or coma @Override public Map getHeaders() throws AuthFailureError { Map params = new HashMap(); params.put("Content-Type", "application/json"); return params; } }; mQueue.add(jsonObjectRequest); } } 

我尝试在Volley上使用GET

您调用的方法的文档说明了这一点

如果jsonRequest为null,则默认为GET的构造方法, 否则POST

您无法使用HTTP JSON正文获取。 也许这就是错误。

 //I try to use this for send Header is application/json jsonBody = new JSONObject("{\"type\":\"example\"}"); 

这不是标题,所以在这里传入null来做GET

 new JsonObjectRequest(url, null, 

在请求结束时,重写一个方法来请求JSON

  ... @Override public void onErrorResponse(VolleyError error) { Log.e("TAG", error.getMessage(), error); } }) { // Notice no semi-colon here @Override public Map getHeaders() throws AuthFailureError { Map params = new HashMap(); params.put("Content-Type", "application/json"); return params; } }; 

通常,要设置自定义标头,您需要覆盖getHeaders并手动设置自定义标头。 但是,volley以不同方式处理内容类型标题,并且getHeaders方式并不总是有效。

因此,对于您的情况,您需要覆盖getBodyContentType 。 所以你的代码看起来像

 JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, jsonBody,new Response.Listener() { @Override public void onResponse(JSONObject response) { Log.d("TAG", response.toString()); }, new Response.ErrorListener(){ @Override public void onErrorResponse(VolleyError error) { Log.e("TAG", error.getMessage(), error); } }){ @Override public String getBodyContentType(){ return "application/json"; } }; 

像这样使用String请求而不是jsonrequest

  StringRequest loginMe = new StringRequest(Request.Method.GET, "http://114.35.246.42:2212/MobileApp/DEST_WebService.asmx/GetNews", new Response.Listener() { @Override public void onResponse(String response) { System.out.println("LoginActivity -- onResponse --> " + response); if (progressDialog != null) { progressDialog.dismiss(); } try { JSONObject jsonObject = new JSONObject(response); } catch (Exception e) { CommonUtility.somethingWentWrongDialog(activity, "LoginActivity -- onResponse-- Exception --> ".concat(e.getMessage())); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { if (progressDialog != null) { progressDialog.dismiss(); } CommonUtility.somethingWentWrongDialog(activity, "LoginActivity -- onErrorResponse --> ".concat(error.getMessage())); } }) { @Override protected Map getParams() { Map params = new HashMap<>(); System.out.println("LoginActivity -- LoginParams --> " + params.toString()); return params; } }; loginMe.setRetryPolicy(new DefaultRetryPolicy(60000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); Volley.newRequestQueue(activity).add(loginMe);