Не удается заставить HttpParams работать с Postrequest

Я не могу получить материал HttpParams из Android-API.

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

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 не предназначен для этого. Некоторое время спустя я нашел этот SO ответ, объяснив это:

Интерфейс HttpParams не существует для указания параметров строки запроса, он предназначен для определения поведения среды выполнения объекта HttpClient.

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

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

Для настройки времени соединения и тайм-аута запроса я использовал сочетание 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(); } } 

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

  • Как установить тайм-аут HttpResponse для Android в Java