【问题标题】:Android volley, how to pass post parameters dynamicallyAndroid volley,如何动态传递post参数
【发布时间】:2016-01-12 14:43:07
【问题描述】:

我是 google 的 Volley 网络库的新手(也是 Android 的新手!),我正在尝试以动态方式传递 POST 参数!

现在我将覆盖 : 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;
}

我想传递变量而不是“硬编码”字符串...

首先我尝试将我的参数 Map 作为我的类的成员,但类成员在 getParams() 方法中不可用。

也许我可以使用单例类来提供我想要传递的参数并在 getParams() 方法中使用它的实例将它们取回?但我认为这不是正确的方式。

下面是我的Volley请求的洞码:

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

【问题讨论】:

  • 为什么不在请求之前创建一些变量并将它们均衡为类变量并将您创建的变量添加到参数中?
  • 有必要从getParams()返回Map&lt;String, String&gt;,而不是仅仅在那里定义它。您可以将自己的集合创建为类级别变量并从getParams() 返回。
  • @shank :这是个好主意。我马上试试这个。谢谢。
  • 你应该扩展 StringRequest 并添加一个 attr 来存储参数。

标签: android network-programming android-volley


【解决方案1】:

在这种情况下,您可以创建一个类扩展 StringRequest。添加一个attr来存储params并在getParams()中返回;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 2015-10-13
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多