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