Может кто-нибудь объяснить мне этот код? - PullRequest
3 голосов
/ 25 января 2011
import org.apache.http.message.BasicNameValuePair;

private String getServerData(String returnString) {               
InputStream is = null;

String result = "";
//the year data to send
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("year","1970"));

//http post
try{
       HttpClient httpclient = new DefaultHttpClient();
       HttpPost httppost = new HttpPost(KEY_121);
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
       HttpResponse response = httpclient.execute(httppost);
       HttpEntity entity = response.getEntity();
       is = entity.getContent();

}catch(Exception e){
       Log.e("log_tag", "Error in http connection "+e.toString());
}
}

Мои вопросы ...

Что делает класс BasicNameValuePair?

Что делает этот фрагмент строки

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

Что делает is = entity.getContent();делать?и я могу передать более одного значения в классе BasicNameValuePair.Могу ли я полностью передать VO вместо этого.

Как показано ниже ...

nameValuePairs.add(new BasicNameValuePair("year","1970","sas","saassa","sas","asas"));

Ответы [ 2 ]

17 голосов
/ 25 января 2011

BasicNameValuePair - это объект, в частности, контейнер для хранения данных и ключей.

Например, если у вас есть эти данные:

Name: Bob

Family name: Smith

Date of birth: 10/03/1977

, вы бы сохранили эти данные как:

ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

nameValuePairs.add(new BasicNameValuePair("name","bob"));

nameValuePairs.add(new BasicNameValuePair("family name","Smith"));

....

Как видите, вы выбираете ключ («имя») и данные, которые должны храниться как связанные с ключом («боб»).Это тип структуры данных, используемый для ускорения и упрощения хранения информации такого рода.

С другой стороны вам нужен инструмент для использования этих данных:

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

этот кодможет быть разделен на 4 части:

httppost.setEntity

Это метод, который принимает URL-адрес в качестве аргумента и пытается извлечь данные (HTML или то, что хранится на этой странице) из этого URL-адреса, используя метод HTTP Post..

new UrlEncodedFormEntity

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

, он использует соглашение

&key=input

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

nameValuePair

- это данные, которые вы хранили ранее.В этом случае он имеет ключ к возможным формам ввода в html, идентифицированном тегом «input name =».В качестве данных он имеет значение, которое вы хотите придать формам.

is = entity.getContent();

HttpEntity - это абстракция, помогающая вам обработать возможный результат.Если веб-сайт недоступен или соединение не работает, HttpEntity сообщит вам.getContent () - это метод, который вы используете для извлечения тела результата Http, т. е. HTML, который веб-сервер отправил вам обратно, в качестве входного потока.Если запрос не был успешным, он даст вам нулевое значение.

BasicNameValuePair принимает только куплеты, поэтому вам придется приводить его несколько раз и каждый раз добавлять его в массив.

Вы не можете привести его к более чем двум значениям, так как они были бы бессмысленными для представления данных (ключ, значение).

Надеюсь, это помогло.

4 голосов
/ 25 января 2011

В конце концов вы выполняете HTTP-запрос POST с полем «year» со значением «1970».

Точно так же, как и в случае публикации веб-формы в этом году.

Немного дополнительно: BasicNameValuePair выглядит вполне удачно названным: это очень простая (базовая) группа из двух вещей (пары), которые служат полем формы (имя) и его содержимым (значением).

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); добавляет эту комбинацию года и 1970 к объекту HttpPost, но с кодировкой (таким образом, там нет «незаконных» вещей).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...