Залп не отправлял почтовый запрос с параметрами.
У меня есть код ниже (Volley Library By Google), чтобы отправить запрос POST на мой php-сервер и в результате получить информацию. Я попробовал код без проверки isset($_POST['id'])
в php и код работал нормально. Buy, когда я начал проверять, php пропустит оператор if и перейдет к else, что означает, что код не отправляет params
правильно. Как я могу это исправить?
RequestQueue queue = Volley.newRequestQueue(Chat.this);
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
CHAT_URL_FEED, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("THISSSSSSSS", response.toString());
if (response != null) {
parseChatJsonFeed(response);
}
}
}, new Response.ErrorListener(){
@Override
public void onErrorResponse(VolleyError error){
VolleyLog.d("Here", "Error: " + error.getMessage());
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("id", id);
return params;
}
};
queue.add(jsonObjReq);
Я также попробовал следующий код:
RequestQueue queue = Volley.newRequestQueue(Chat.this);
JSONObject params = new JSONObject();
try {
params.put("id", id);
} catch (JSONException e) {
e.printStackTrace();
}
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
CHAT_URL_FEED, params,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("THISSSSSSSS", response.toString());
if (response != null) {
parseChatJsonFeed(response);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d("Here", "Error: " + error.getMessage());
}
});
queue.add(jsonObjReq);
но я все равно получаю тот же результат.
6 ответов
Потратив немного больше времени на изучение этой проблемы, я обнаружил, что Volley не работает должным образом с JSON-запросами с POST-запросами. Пользователь @SMR предложил это в разделе комментариев моего вопроса. Я также видел похожие ответы в группах Google и в репозитории Mian на Git. Я использовал GET-запросы для передачи информации на сервер и получения JSON-фида.
StringRequest postRequest = new StringRequest(Request.Method.POST, CHAT_URL_FEED,
new Response.Listener<String>()
{
@Override
public void onResponse(String response) {
// response
Log.d("THISSSSSSSS", response.toString());
if (response != null) {
parseChatJsonFeed(response);
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
// error
VolleyLog.d("Here", "Error: " + error.getMessage());
}
}
) {
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<String, String>();
params.put("id", id);
return params;
}
};
Залп не поддерживает параметры при запросе JSONObject. Вы можете получить ответ как JSON String и преобразовать обратно в JSON, используя класс JSONObject.
Вы также можете отправить запрос String (JSON) как POST, как показано ниже.
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
String requestStr = "{\n" +
"\"id\": \"your JSON\"\n" +
"}\n";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST,"http://<Your url>",
requestStr,new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//Your Logic on Success
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//Your Logic on Error
}
});
queue.add(request);
Для отправленного POST-запроса вы можете написать собственный класс запроса, основанный на классе JsonRequest PS. Я использую этот способ в своей библиотеке (на основе Volley).
Я немного опаздываю, чтобы ответить на этот вопрос, но я думаю, что это может помочь кому-то, кто столкнулся с той же проблемой. Я просматриваю все похожие вопросы на SO, касающиеся PHP и API Volley, но не нашел удовлетворительного ответа.
Проблема в том, что вы отправляете данные из библиотеки Volley как тип контента
приложение/json
но ваш PHP-скрипт ожидает данные POST как тип контента
приложение/x-www-форма-urlencoded
В вашем PHP-скрипте сделайте следующее:
$_POST = json_decode(file_get_contents('php://input'), true);
if ( !empty($_POST['id']) ) {
$id = $_POST['id'];
echo $id;
}
Теперь, если вы проверите
if( isset($_POST['id']) ){
echo "something";
}
теперь должно работать
Несмотря на отправку запроса в виде StringRequest, используйте JsonObjectRequest. Я уверен, что проблема исчезнет!
Поблагодаришь меня позже :)