无法在帖子中附加标题和帖子排在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);
是否有必要使用凌空?您可以切换到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);
}
你的答案显示'StringRequest'而op是要求'JSONObjectRequest' –
这不是你可以稍后将其转换为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);
希望这对你的作品
你怎么知道错误是因为头? –
尝试这种方式:而不是'JsonObjectRequest'使用'StringRequest'并且不在参数中添加'Content-Type'只传递需要值的参数。有时响应会出现在json字符串中,新手认为必须使用JSON,但它应该需要普通的'StringRequest'。 –