Android截击,如何动态传递post参数

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

我是谷歌截击网络库(以及Android)的新手,我正在尝试以动态的方式传递帖子参数

目前,我正在覆盖:getParams()方法: 并以硬编码方式返回参数

@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);