【问题标题】:Android Volley request works in emulator but not in deviceAndroid Volley 请求在模拟器中有效,但在设备中无效
【发布时间】:2019-11-20 17:49:02
【问题描述】:

我有一个使用 POST 方法的 volley StringRequest,请求能够连接到设备和模拟器中的服务器,但是,请求需要以正确的顺序提供参数才能工作,并且由于某种原因,模拟器会按顺序发送这些参数,但设备不会。

这是为什么?有什么办法可以避免这种情况吗?

调试截图:

我的字符串请求:

StringRequest xx = new StringRequest(Request.Method.POST, getAjaxUrlForFunction("Login"), new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.w("RESPONSE-=",response);
                callback.onSucces(response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
                callback.onError(error);
            }
        }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String,String> paramss = new HashMap<String, String>();
                paramss.put("funcion","login");
                paramss.put("ajax_request","controller");
                paramss.put("args[0]", name);
                paramss.put("args[1]", password);
                return paramss;
            }
        };

【问题讨论】:

  • HashMap 不保持插入顺序,所以不知道为什么你会期望这么多;但是,LinkedHashMap 可以:stackoverflow.com/a/10710205/2711811.
  • @Andy 我明白了,我不知道这一点,但是,我认为我不能在凌空请求中使用 LinkedHashMap 作为参数,可以吗?
  • 它扩展了HashMap,所以我不明白为什么不这样做。
  • 我刚刚意识到,感谢您的快速回复,如果您愿意,可以将其发布为答案。
  • 试一试,如果它有效,请将您的代码作为解决方案发布 - 将成为一个很好的未来参考。

标签: android httprequest android-volley


【解决方案1】:

正如Andy 所述并解释Here HashMaps 不保留顺序,但LinkedHashMaps 保留项目的插入顺序,因此它在模拟器上工作而在设备上不起作用的唯一原因是纯粹的运气。

使用LinkedHashMap后的工作请求参数

@Override
protected Map<String, String> getParams() throws AuthFailureError {
    //Map<String,String> paramss = new HashMap<String, String>();
    LinkedHashMap<String,String> paramss = new LinkedHashMap<>();
    paramss.put("funcion","login");
    paramss.put("ajax_request", "controller");
    paramss.put("args[0]", name);
    paramss.put("args[1]", password);
    Log.w("PARAMETERS",paramss.toString());
    return paramss;
}

【讨论】:

    猜你喜欢
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    相关资源
    最近更新 更多