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"));
答案 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
对象,但是使用编码(因此那里没有'非法'的东西)。