Не могу получить httpпарамы, работающие с postrequest

StackOverflow https://stackoverflow.com/questions/4424425

  •  09-10-2019
  •  | 
  •  

Вопрос

Я не могу получить материал httpParams от работы Android-API.

Я просто не хочу отправлять несколько простых параметров с моим почтером. Все работает нормально, за исключением параметров. Код для установки параметров в POTTREQUEST:

HttpParams params = new BasicHttpParams();
params.setParameter("password", "secret");
params.setParameter("name", "testuser");
postRequest.setParams(params);

Похоже, что этот код вообще не добавляет никакого параметра, так как сервер всегда отвечает, что мой запрос отсутствует «имя» -парамен.

Пример того, что на самом деле работает, как ожидалось:

ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("name", "testuser"));
postParameters.add(new BasicNameValuePair("password", "secret"));
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
postRequest.setEntity(formEntity);

Но я хотел бы использовать версию первого примера, так как легче читать и понимать.

Любой подсказку действительно ценится!

Это было полезно?

Решение

Однажды у меня была такая же проблема, и я решил так же, как вы сделали ... Я помню, я нашел некоторую тему о том, почему это не работает. Это было что-то о реализации библиотеки Apache на стороне сервера.

К сожалению, я не могу найти эту тему сейчас, но если бы я был тобой, я бы просто оставил его работать и не будет беспокоиться о «элегантности» кода, потому что, вероятно, там не так много, и если Вы можете, это совсем не практично.

Другие советы

Пытался заставить это работать первым путем, но кажется HttpParams Интерфейс не предназначен для того, чтобы быть построен для этого. Огурнув некоторое время, я нашел Это так отвечать Объясняя это:

Интерфейс HTTPPARAMS не здесь для указания параметров строки запроса, это для определения поведения времени выполнения объекта HTTPClient.

Документация не настолько специфична, хотя:

Интерфейс httpпарамс представляет собой собрание неизменных значений, которые определяют поведение времени выполнения компонента.

Для настройки соединения и запроса ожидания запроса я использовал смесь обоих HttpParams а также List<NameValuePair>, который полностью функционален и использует AndroidHttpClient Класс, доступный от API 8:

public HttpResponse securityCheck(String loginUrl, String name, String password) {
    AndroidHttpClient client = AndroidHttpClient.newInstance(null);
    HttpPost requestLogin = new HttpPost(
            loginUrl + "?");

    //Set my own params using NamaValuePairs
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("j_username", name));
    params.add(new BasicNameValuePair("j_password", password));

    //Set the timeouts using the wrapped HttpParams
    HttpParams httpParameters = client.getParams();
    int timeoutConnection = 3000;
    HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
    int timeoutSocket = 5000;
    HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
    try {
        requestLogin
                .setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
        HttpResponse response = client.execute(requestLogin);
        return response;
    } catch (Exception e) {
        Log.e(TAG, e.getMessage(), e);
        return null;
    }finally {
        client.close();
    }
}

Смотрите также:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top