Android Volley 请求在模拟器中有效,但在设备中无效

Android Volley request works in emulator but not in device

我有一个使用 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;
            }
        };

Andy and explained 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;
}