谁能解释一下这段代码?

时间:2011-01-25 10:28:02

标签: android

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 个答案:

答案 0 :(得分:17)

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"));

....

如您所见,您选择一个键(“名称”)和要存储为键的数据(“bob”)。它是一种数据结构,用于加速并更容易存储此类信息。

另一方面,您需要一个工具来使用此数据:

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

此代码可分为4个部分:

httppost.setEntity

是一种将url作为参数的方法,并尝试使用HTTP Post方法从该URL检索数据(HTML或存储在该页面上的内容)。

new UrlEncodedFormEntity

是一种方法,可以通过http服务器将关键数据值对转换为可理解的内容。

它使用惯例

&key=input

哪一个最常用,但请记住有更多方法可以做到。

nameValuePair

是您之前存储的数据。在这种情况下,它具有键入html中可能的输入形式,由“input name =”标记标识。作为数据,它具有您希望为表单提供的值。

is = entity.getContent();

HttpEntity是一个帮助您处理可能结果的抽象。如果网站无法访问或连接断开,HttpEntity将通知您。 getContent()是你使用检索Http结果体的方法,即:网络服务器发送给你的html,作为输入流。如果请求没有成功,它将为您提供空值。

BasicNameValuePair只接受对联,所以你必须多次施放它,并且每次都将它添加到arraylist。

您不能将它转换为两个以上的值,因为它们对于数据的(键,值)表示没有意义。

希望它有所帮助。

答案 1 :(得分:4)

最后,您正在执行一个http POST请求,其字段“year”的值为“1970”。

就像那年发布的网络形式一样。

多一点: BasicNameValuePair看起来非常合适:它是一个非常简单(基本)的两个组(对)组,用作表单域(名称)及其内容(值)。

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));将年份和1970年的组合添加到HttpPost对象,但是使用编码(因此那里没有'非法'的东西)。