android的http通信方法
package com.hl; 002??003import java.io.BufferedReader; 004import java.io.IOException; 005import java.io.InputStream; 006import java.io.InputStreamReader; 007import java.util.ArrayList; 008import java.util.HashMap; 009import java.util.Iterator; 010import java.util.Map; 011import java.util.Set; 012??013import org.apache.http.HttpEntity; 014import org.apache.http.HttpResponse; 015import org.apache.http.client.entity.UrlEncodedFormEntity; 016import org.apache.http.client.methods.HttpPost; 017import org.apache.http.impl.client.DefaultHttpClient; 018import org.apache.http.message.BasicNameValuePair; 019??020import android.app.Activity; 021import android.os.Bundle; 022import android.view.View; 023import android.view.View.OnClickListener; 024import android.widget.Button; 025import android.widget.EditText; 026import android.widget.TextView; 027??028public class SimplePOST extends Activity { 029?private TextView show; 030?private EditText txt; 031?private Button btn; 032???033????@Override 034????public void onCreate(Bundle savedInstanceState) { 035????????super.onCreate(savedInstanceState); 036????????setContentView(R.layout.main); 037????????show = (TextView)findViewById(R.id.show); 038????????txt = (EditText)findViewById(R.id.txt); 039????????btn = (Button)findViewById(R.id.btn); 040????????btn.setOnClickListener(new OnClickListener() { 041?????042???@Override 043???public void onClick(View v) { 044????dopost(txt.getText().toString()); 045??????046???} 047??}); 048????} 049??050?private void dopost(String val){ 051?????//封装数据 052?????Map<String, String> parmas = new HashMap<String, String>(); 053?????parmas.put("name", val); 054??????055?????DefaultHttpClient client = new DefaultHttpClient();//http客户端 056?????HttpPost httpPost = new HttpPost("http://mhycoe.com/test/post.php"); 057??????058?????ArrayList<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>(); 059?????if(parmas != null){ 060?????????Set<String> keys = parmas.keySet(); 061?????????for(Iterator<String> i = keys.iterator(); i.hasNext();) { 062??????????????String key = (String)i.next(); 063??????????????pairs.add(new BasicNameValuePair(key, parmas.get(key))); 064?????????} 065????} 066??????067??try { 068???UrlEncodedFormEntity p_entity = new UrlEncodedFormEntity(pairs, "utf-8"); 069?????????/* 070??????????*? 将POST数据放入HTTP请求 071??????????*/ 072?????????httpPost.setEntity(p_entity); 073?????????/* 074??????????*? 发出实际的HTTP POST请求 075???????????*/ 076?????????HttpResponse response = client.execute(httpPost); 077?????????HttpEntity entity = response.getEntity(); 078?????????InputStream content = entity.getContent(); 079???String returnConnection = convertStreamToString(content); 080?????????show.setText(returnConnection); 081??} catch (IllegalStateException e) { 082???e.printStackTrace(); 083??} catch (IOException e) { 084???e.printStackTrace(); 085??} 086??????087?} 088??089??private String convertStreamToString(InputStream is) { 090???BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 091?????????StringBuilder sb = new StringBuilder(); 092?????????String line = null; 093?????????try { 094??????????????while ((line = reader.readLine()) != null) { 095???????????????????sb.append(line); 096??????????????} 097?????????} catch (IOException e) { 098??????????????e.printStackTrace(); 099?????????} finally { 100??????????????try { 101???????????????????is.close(); 102??????????????} catch (IOException e) { 103???????????????????e.printStackTrace(); 104??????????????} 105?????????} 106?????????return sb.toString(); 107?} 108}
?
?
??HttpURLConnection默认使用GET方式,例如下面代码所示:
?
- //使用HttpURLConnection打开连接 ?????????????????HttpURLConnection?urlConn?=?(HttpURLConnection)?url.openConnection(); ?
- ????????????????//得到读取的内容(流) ?????????????????InputStreamReader?in?=?new?InputStreamReader(urlConn.getInputStream()); ?
- ????????????????//?为输出创建BufferedReader ?????????????????BufferedReader?buffer?=?new?BufferedReader(in); ?
- ????????????????String?inputLine?=?null; ?????????????????//使用循环来读取获得的数据 ?
- ????????????????while?(((inputLine?=?buffer.readLine())?!=?null)) ?????????????????{ ?
- ????????????????????//我们在每一行后面加上一个"\n"来换行 ?????????????????????resultData?+=?inputLine?+?"\n"; ?
- ????????????????}????????? ?????????????????//关闭InputStreamReader ?
- ????????????????in.close(); ?????????????????//关闭http连接 ?
- ????????????????urlConn.disconnect();?
如果需要使用POST方式,则需要setRequestMethod设置。代码如下:
?
2. HttpClient接口
??? 使用Apache提供的HttpClient接口同样可以进行HTTP操作。
??? 对于GET和POST请求方法的操作有所不同。GET方法的操作代码示例如下:
?
使用POST方法进行参数传递时,需要使用NameValuePair来保存要传递的参数。,另外,还需要设置所使用的字符集。代码如下所示:
?
?
??? 另外,在使用POST方式进行传输时,需要进行字符编码。
本文出自 “我的Android开发志” 博客,请务必保留此出处http://52android.blog.51cto.com/2554429/496621
??
?