Как опубликовать JSON с залпом на веб-сервисе php

Я пытаюсь опубликовать 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);

}

0

Решение

Вы пытаетесь отправить 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, токены и т. д.

4

Другие решения

  1. Преобразовать объект в строку JSON.
  2. Отменить запрос getBody of Volley
    объект
  3. Переопределите 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

https://github.com/ogrebgr/android_volley_examples/blob/master/src/com/github/volley_examples/toolbox/GsonRequest.java

0

По вопросам рекламы [email protected]