Android截击,如何动态传递post参数
我是谷歌截击网络库(以及Android)的新手,我正在尝试以动态的方式传递帖子参数 目前,我正在覆盖:getParams()方法: 并以硬编码方式返回参数Android截击,如何动态传递post参数,android,network-programming,android-volley,Android,Network Programming,Android Volley,我是谷歌截击网络库(以及Android)的新手,我正在尝试以动态的方式传递帖子参数 目前,我正在覆盖:getParams()方法: 并以硬编码方式返回参数 @Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<String, String>(); params.put("login", "my_l
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<String, String>();
params.put("login", "my_login");
params.put("password", "my_password");
return params;
}
@覆盖
受保护的映射getParams()
{
Map params=新的HashMap();
参数put(“登录”、“我的登录”);
参数put(“密码”、“我的密码”);
返回参数;
}
我希望传递变量而不是“硬编码”字符串…
首先,我尝试将参数映射作为类的成员,但getParams()方法中无法使用类成员
也许我可以使用一个singleton类,我可以给出我想要传递的参数,并使用getParams()方法中的实例将它们返回?但我认为这不是正确的方式
下面是我截击请求的洞码:
RequestQueue queue = VolleySingleton.getInstance().getRequestQueue();
String url = "https://theUrlToRequest";
StringRequest postRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>()
{
@Override
public void onResponse(String response) {
JSONObject mainObject = null;
try {
Log.i("app", "Result = " + response);
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
Log.i("app", "Fail on Login" + error.toString());
}
}
) {
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<String, String>();
params.put("login", "my_login");
params.put("password", "my_password");
return params;
}
};
queue.add(postRequest);
RequestQueue queue=VolleySingleton.getInstance().getRequestQueue();
字符串url=”https://theUrlToRequest";
StringRequest postRequest=新的StringRequest(Request.Method.POST,url,
新的Response.Listener()
{
@凌驾
公共void onResponse(字符串响应){
JSONObject mainObject=null;
试一试{
Log.i(“应用程序”、“结果=“+响应”);
}捕获(JSONException e){
e、 printStackTrace();
}
}
},
新的Response.ErrorListener()
{
@凌驾
公共无效onErrorResponse(截击错误){
Log.i(“应用程序”,“登录失败”+error.toString());
}
}
) {
@凌驾
受保护的映射getParams()
{
Map params=新的HashMap();
参数put(“登录”、“我的登录”);
参数put(“密码”、“我的密码”);
返回参数;
}
};
添加(postRequest);
在这种情况下,您可以创建一个扩展StringRequest的类。添加一个attr来存储参数并在getParams()中返回
MyStringRequest扩展了StringRequest{
private Map params=new HashMap();
公共MyStringRequest(映射参数、int-mehotd、字符串url、侦听器Listener、ErrorListener errorListenr){
超级(mehotd、url、listenr、errorListenr)
this.params=params
}
@凌驾
受保护的映射getParams(){
返回参数;
}
}
RequestQueue queue=VolleySingleton.getInstance().getRequestQueue();
字符串url=”https://theUrlToRequest";
Map params=新的HashMap();
参数put(“登录”、“我的登录”);
参数put(“密码”、“我的密码”);
MyStringRequest postRequest=新建MyStringRequest(参数,Request.Method.POST,url,
新的Response.Listener(){
},
新的Response.ErrorListener(){
}
);
添加(postRequest);
为什么不在请求之前创建一些变量并将它们与类变量相等,然后将您创建的变量添加到params?必须从getParams()
返回Map
,而不是仅在那里定义它。您可以创建自己的集合作为类级变量,并从getParams()
@shank()返回它:这是一个很好的主意。我马上试试这个。谢谢。您应该扩展StringRequest并添加属性来存储参数。
MyStringRequest extends StringRequest{
private Map params = new HashMap();
public MyStringRequest (Map params,int mehotd,String url,Listener listenr,ErrorListener errorListenr){
super(mehotd,url,listenr,errorListenr)
this.params = params
}
@Override
protected Map<String, String> getParams(){
return params;
}
}
RequestQueue queue = VolleySingleton.getInstance().getRequestQueue();
String url = "https://theUrlToRequest";
Map<String, String> params = new HashMap<String, String>();
params.put("login", "my_login");
params.put("password", "my_password");
MyStringRequest postRequest = new MyStringRequest (params ,Request.Method.POST, url,
new Response.Listener<String>(){
},
new Response.ErrorListener(){
}
);
queue.add(postRequest);