如何发送请求标题是“内容类型”:“应用程序/ 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);
- 如何同步两个Listview位置
- 旋转和平移矩阵来自单应性opencv
- Android:将资产中的tar文件复制到sdcard – IOException
- 将List作为ParcelableArrayList传递
- 在游戏暂停之前复制当前屏幕的图片使其模糊并在游戏暂停期间渲染到屏幕
- ViewPager和Fragment onClickListener无法正常工作
- 快速滚动使用UniversalImageloader或使用Views的引用优化ListView
- 在String中将字符串数组的ArrayList从一个活动传递到另一个活动
- 使用Apache POI创建.xlsx文件时的java.lang.NoClassDefFoundError