Не удается заставить 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);
Но я хотел бы использовать версию первого примера, поскольку ее легче читать и понимать.
Любые подсказки действительно оценены!
Ответы
Ответ 1
Как только у меня была такая же проблема, и я решил ее так же, как и вы... Помню, я нашел какую-то тему о том, почему это не работает. Это было чем-то вроде реализации библиотеки Apache на стороне сервера.
К сожалению, я не могу найти эту тему сейчас, но если бы я был вами, я бы просто оставил ее работоспособной и не беспокоился бы о "элегантности" кода, потому что, вероятно, и если вы можете, это не практично вообще.
Ответ 2
Пытался заставить его работать первым способом, но кажется, что 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();
}
}
См. также: