Я пытаюсь отправить параметры POST в запросе JsonObjectRequest. Первоначально это работало для меня, следуя указаниям официального кода, передавая JSONObject, содержащий параметры, в конструкторе JsonObjectRequest. Затем он внезапно перестал работать, и я не внес никаких изменений в код, который ранее работал. Сервер больше не распознает, что отправляются какие-либо параметры POST. Вот мой код:
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://myserveraddress";
// POST parameters
Map<String, String> params = new HashMap<String, String>();
params.put("tag", "test");
JSONObject jsonObj = new JSONObject(params);
// Request a json response from the provided URL
JsonObjectRequest jsonObjRequest = new JsonObjectRequest
(Request.Method.POST, url, jsonObj, new Response.Listener<JSONObject>()
{
@Override
public void onResponse(JSONObject response)
{
Toast.makeText(getApplicationContext(), response.toString(), Toast.LENGTH_SHORT).show();
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error)
{
Toast.makeText(getApplicationContext(), error.toString(), Toast.LENGTH_SHORT).show();
}
});
// Add the request to the RequestQueue.
queue.add(jsonObjRequest);
Вот простой код PHP тестера на сервере:
$response = array("tag" => $_POST["tag"]);
echo json_encode($response);
Ответ, который я получаю: {"tag":null}
Вчера он работал нормально и отвечал {"tag":"test"}
Я ничего не изменил, но сегодня он больше не работает.
В конструкторе исходного кода Volley javadoc говорится, что вы можете передать JSONObject в конструкторе для отправки параметров публикации по адресу "@param jsonRequest": https://android.googlesource.com/platform/frameworks/volley/+/master/src/main/java/com/android/volley/toolbox/JsonObjectRequest.java
/**
* Создает новый запрос.
* @param method метод HTTP для использования
* @param url URL для получения JSON из
* @param jsonRequest A {@link JSONObject} для публикации с запросом. Нуль разрешен и
* указывает на то, что параметры не будут опубликованы вместе с запросом.
Я читал другие посты с похожими вопросами, но решения не сработали для меня:
Volley JsonObjectRequest Отправить запрос не работает
Volley Post JsonObjectRequest игнорирует параметры при использовании getHeader и getParams
Залп не отправлял почтовый запрос с параметрами.
Я попытался установить для JSONObject в конструкторе JsonObjectRequest значение null, затем переопределить и установить параметры в методах "getParams()", "getBody()" и "getPostParams()", но ни одно из этих переопределений не сработало для мне. Другим предложением было использование дополнительного вспомогательного класса, который в основном создает пользовательский запрос, но это исправление слишком сложно для моих нужд. Если это сводится к этому, я сделаю все, чтобы заставить его работать, но я надеюсь, что есть простая причина, почему мой код работает, а потом просто перестал, а также простое решение.