Я пытаюсь опубликовать Json для моего спокойного API с залпом, но это не работает. До сих пор я тестировал свой веб-сервис, посылая полезную нагрузку json через клиентское приложение Advance rest на chrome, и он возвращает ответ json …. но когда я пробую его с Volley, он возвращает onErrorResponse. Пожалуйста, может кто-нибудь сказать мне, как решить эту проблему, спасибо заранее.
Json PayLoad:
{"country":"isreal","mobile":"009988778"}
Код
private void processLogin() {
showProgressDialog();
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
Const.LOGIN_URL, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.i("JSON response", "JSON Posting" + response.toString());
hideProgessDialog();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
VolleyLog.d(ERROR_TAG, "Error: " + volleyError.getMessage());
hideProgessDialog();
}
}){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json");
return headers;
}
@Override
protected Map<String, String> getParams(){
String country_value = country.getSelectedItem().toString();
String mobile_value = mobile.getText().toString();
Map<String, String> params = new HashMap<>();
params.put("country",country_value);
params.put("mobile", mobile_value);
return params;
}
};
AppController.getInstance().addToRequestQueue(jsonObjReq, login_tag);
}
Вы пытаетесь отправить JSON как часть заголовков, которые не будут работать.
Это то, что вам нужно —
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
Const.LOGIN_URL, **->YOUJSONOBJECTHERE<-**, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.i("JSON response", "JSON Posting" + response.toString());
hideProgessDialog();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
VolleyLog.d(ERROR_TAG, "Error: " + volleyError.getMessage());
hideProgessDialog();
}
});
Вам необходимо отправить JSONObject
как часть запроса, а не как часть заголовков запроса. Попробуйте и дайте мне, если это решит проблему, иначе мы устраняем ее.
И как вы уже используете JSONObjectRequest
Вам не нужно ни устанавливать тип содержимого, ни переопределять getParams()
до тех пор, пока вам не понадобится отправить дополнительную информацию в заголовок, например, AgentType, токены и т. д.
Переопределите getBodyContentType, чтобы установить как json
Gson gson = new Gson();
final String json = gson.toJson(loginDTO);GsonRequest<EmailLoginRestResponse> jsObjRequest = new GsonRequest<EmailLoginRestResponse>(
Request.Method.POST, url,
EmailLoginRestResponse.class, null,
this.createLoginRequestSuccessListener(),
this.createLoginErrorListener()){
@Override
public byte[] getBody() throws AuthFailureError {
return json.getBytes();
}
@Override
public String getBodyContentType() {
return "application/json; charset=" + this.getParamsEncoding();
}
};
jsObjRequest.setShouldCache(false);
this.mRequestQueue.add(jsObjRequest);
GsonRequest.java