我有一个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 data in PHP formatting issue看到问题。有办法解决吗?
2)奇怪的是,当我的数据到达PHP时,所有“”和“”。字符被替换为“ _”。我怀疑其他敏感字符也一样,例如“ /”和“'”。我知道这是否是GET变量,但是POST变量是否仍会发生这种情况?还是与(1)有关?
---编辑---
我传递给方法sendRequest
的HashMap是动态生成的,但通常它只是:
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);
数据到达那里就好了,它的格式非常奇怪,并且确实影响了我在服务器端的处理。
答案 0 :(得分:0)
String _Url= "put your url here";
//rest request
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
StringRequest sr = new StringRequest(Request.Method.POST, _Url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if(response !=null)
{
//you can check the response here by puting log here
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i("error", "error: "+error);
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("key1", value in string);
params.put("key2", value in string);
params.put("method", "mehtod name here");
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("Content-Type", "application/x-www-form-urlencoded");
return params;
}
};
queue.add(sr);
答案 1 :(得分:0)
首先,在onCreate中初始化RequestQueue。
RequestQueue queue = Volley.newRequestQueue(this);
然后为您准备变量
Map<String, String> params= new HashMap<>();
params.put("key1", "arg1");
params.put("key2", "arg2");
params.put("key3", "arg3");
并使用此无效的POST查询到服务器端代码。
private void sendRequest(final String QUERY_URL, final Map<String,String> mapParams)
{
StringRequest postRequest = new StringRequest(Request.Method.POST, QUERY_URL ,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//Log.d(TAG, response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//Log.d(TAG , error.toString());
}
}
) {
@Override
protected Map<String, String> getParams() {
return mapParams;
}
};
queue.add(postRequest);
}
还有
sendRequest("http://foo.com/bar.php", params)