2011-01-25 24 views
3
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")); 

答えて

17

BasicNameValuePairはオブジェクトであり、具体的にはデータとキーを保持するコンテナです。あなたはこのデータを持っている場合たとえば

は:あなたがするキー(「名前」)と、データを選択してください見ての通り

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

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

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

.... 

Name: Bob 

Family name: Smith 

Date of birth: 10/03/1977 

を、あなたは、このデータを格納しますキー(「ボブ」)にリンクして記憶される。この種の情報を高速化して保存するのに使用されるデータ構造の一種です。あなたはこのデータを使用するためのツールを必要とするもう一方の端に

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

このコードは4つの部分に分けることができます。

httppost.setEntity 

はURLを引数として取る方法であり、 HTTP Postメソッドを使用して、そのURLからデータ(HTMLまたはそのページに格納されているもの)を取得しようとします。

新しいUrlEncodedFormEntity

は、httpサーバによって分かりやすい何かにキー・データ値のペアをtrasform方法です。

それが慣習

&key=input 

最も使用されるのいずれかを使用しますが、それを行うにはことがより多くの方法を覚えています。

nameValuePair 

は、以前に保存したデータです。この場合、 "input name ="タグで識別されるhtmlに可能な入力フォームのキーがあります。データとしては、フォームに与えたい値があります。

is = entity.getContent(); 

HttpEntityは、可能な結果を​​処理するのに役立つ抽象です。 Webサイトに到達できない場合、または接続が切断されている場合は、HttpEntityから通知されます。 getContent()は、Httpの結果の本体を取得するためのメソッドです。つまり、Webサーバーから返されたhtmlを入力ストリームとして返します。リクエストが成功しなかった場合は、null値が返されます。

BasicNameValuePairは大冒頭のみを受け入れるため、複数回キャストする必要があり、毎回arraylistに追加する必要があります。

2つ以上の値にキャストすることはできません。データの(キー、値)表現には意味がありません。

希望しました。

+0

私の質問を更新しました – theJava

+0

...答えとしてマークするのを忘れないでください;) – Mascarpone

4

あなたは、フィールド「年」の値「1970」を持つHTTP POSTリクエストをやっています。

その年のウェブフォームの投稿と同じです。

ビット追加: BasicNameValuePairは非常に簡単に名前が付けられています:フォームフィールド(名前)とその内容(値)として機能する2つのもの(ペア)の非常に単純な(基本的な)グループ。

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));は、年と1970の組み合わせをHttpPostオブジェクトに追加しますが、エンコーディングを使用しています(したがって、そこには「違法」なものはありません)。

+0

+1正確さと説明のために。 – Mikaveli

+0

私の質問を更新しました – theJava

関連する問題