Запрос Android Volley работает в эмуляторе, но не в устройстве - PullRequest
2 голосов
/ 20 ноября 2019

У меня есть залп StringRequest с использованием метода POST, запрос может подключиться к серверу как на устройстве, так и на эмуляторе, но для его работы необходимо, чтобы параметры были в правильном порядке, и по какой-то причине,эмулятор отправляет эти параметры по порядку, а устройство - нет.

Почему это так? Что я могу сделать, чтобы избежать этого?

Снимок экрана отладки: enter image description here

My 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;
            }
        };

1 Ответ

1 голос
/ 20 ноября 2019

Как отметил Энди и объяснил Здесь 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;
}
...