У меня есть приложение для Android, которое после нажатия кнопки отправляет запрос HTTPRequest в файл .php на моем сервере.Внутри HTTPRequest я храню переменные POST, которые обрабатываются на стороне сервера.
Это мой код:
public void sendRequest(Context context, String url, final HashMap<String, String> hm) {
RequestQueue queue = Volley.newRequestQueue(context);
Log.w("url", url);
// Request a string response from the provided URL.
StringRequest sr = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.w("Response", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.w("Sending progress", "Failure");
}
}) {
@Override
public byte[] getBody() throws AuthFailureError {
return new JSONObject(hm).toString().getBytes();
}
@Override
protected Map<String, String> getParams()
{
return hm;
}
};
// Add the request to the RequestQueue.
queue.add(sr);
}
Обратите внимание, что используемая переменная HashMap передается в сам метод, потому что я хочуиспользовать этот метод динамически в других классах.Данные туда попадают нормально, но с некоторыми явными проблемами:
1) По какой-то причине моя строка JSON передается как «ключ», а не как «значение».На самом деле я только что задал вопрос об этом - кто-то любезно ответил мне - вопрос можно увидеть на POST-данных в вопросе форматирования PHP .Есть ли способ решить эту проблему?
2) Как ни странно, когда мои данные достигли PHP, все "" и "."символы были заменены на «_».Я подозреваю, что другие чувствительные символы будут такими же, как "/" и "'".Я понимаю, если это была переменная GET, но должно ли это происходить для переменных POST?Или это связано с (1)?
--- EDIT ---
HashMap, который я передаю в метод sendRequest
, генерируется динамически, но в целом это просто:
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("personName", ((EditText) findViewById(R.id.text1).getText().toString().trim());
hm.put("personNumber", ((EditText) findViewById(R.id.text2).getText().toString().trim());
sendRequest(getApplicationContext(), "http://foo.com/bar.php", hm);
Данные поступают хорошо, они просто очень странно отформатированы и влияют на мою обработку на стороне сервера.