你的位置:首页 > 操作系统

[操作系统]android之HttpClient


Apache包是对android联网访问封装的很好的一个包,也是android访问网络最常用的类。

下面分别讲一下怎么用HttpClient实现get,post请求。

1.Get 请求

HttpGet get = new HttpGet("http://www.baidu.com");HttpClient hClient = new DefaultHttpClient();httpResponse = hClient.execute(get);

  

2.Post 请求

Map<String, String> map = new HashMap<String, String>();map.put("id", id);map.put("name", name);map.put("permission", String.valueOf(permission)); List<NameValuePair> list = new ArrayList<NameValuePair>(); if(map != null && !map.isEmpty()){ for(Map.Entry<String, String> entry : map.entrySet()){//迭代器 //键值对 NameValuePair nameValuePair = new BasicNameValuePair(entry.getKey(), entry.getValue()); list.add(nameValuePair); } }UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list ,encode);//使用post方式提交数据HttpPost post = new HttpPost(path);post.setEntity(entity);//请求体中//默认客户端HttpClient client = httpClient;HttpResponse httpResponse = client.execute(post);

  

3.代码实例:

先是get请求

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader;  import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.DefaultHttpClientConnection; import org.apache.http.impl.client.DefaultHttpClient;  import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button;  public class MainActivity extends Activity {    private Button requestButton;   private HttpResponse httpResponse;   private HttpEntity entity;   @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);     requestButton = (Button) findViewById(R.id.requestButton);          requestButton.setOnClickListener(new OnClickListener() {              public void onClick(View v) {          new Thread(new Downtest()).start();       }     });   }   class Downtest implements Runnable{     public void run() {     //生成一个请求对象,请求       HttpGet get = new HttpGet("http://www.baidu.com");       //生成一个Http客户端对象       HttpClient hClient = new DefaultHttpClient();       //使用Http客户端发送请求对象       InputStream inputStream = null;       try {         httpResponse = hClient.execute(get);//httpResponse返回的响应        //返回的响应数据就放在里边                 entity = httpResponse.getEntity();         inputStream = entity.getContent();         BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));         String result = "";         String line = "";         while((line = reader.readLine())!= null){           result = result+ line;         }         System.out.println(result);       } catch (ClientProtocolException e) {         // TODO Auto-generated catch block         e.printStackTrace();       } catch (IOException e) {         // TODO Auto-generated catch block         e.printStackTrace();       }finally{         try{           inputStream.close();         }catch(Exception e){           e.printStackTrace();         }       }    }   }    } 

  再是post请求

public class AccountHttpUtils {    //private static String PATH = "http://192.168.253.1:8088/CallName/servlet/AccountServler";   private static HttpClient httpClient;   public AccountHttpUtils(HttpClient httpClient) {       this.httpClient = httpClient;   }   public static String sendHttpClient(String path,Map<String,String> map,String encode){    List<NameValuePair> list = new ArrayList<NameValuePair>();    if(map != null && !map.isEmpty()){      for(Map.Entry<String, String> entry : map.entrySet()){//迭代器        //键值对        NameValuePair nameValuePair = new BasicNameValuePair(entry.getKey(), entry.getValue());        list.add(nameValuePair);      }    }    try {      //实现将请求的参数封装到表单中,     UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list ,encode);     //使用post方式提交数据     HttpPost post = new HttpPost(path);     post.setEntity(entity);//请求体中     //默认客户端     HttpClient client = httpClient;          HttpResponse httpResponse = client.execute(post);     if(httpResponse.getStatusLine().getStatusCode() == 200){       HttpEntity httpEntity = httpResponse.getEntity();       InputStream inputStream = httpEntity.getContent();       return changeInputeStream(inputStream, encode);     }   } catch (UnsupportedEncodingException e) {     // TODO Auto-generated catch block     e.printStackTrace();   } catch (ClientProtocolException e) {     // TODO Auto-generated catch block     e.printStackTrace();   } catch (IOException e) {     // TODO Auto-generated catch block     e.printStackTrace();   }        return "";   }   /**   * 将一个输入流转换成字符串   * @param inputStream   * @param encode   * @return   */   private static String changeInputeStream(InputStream inputStream,String encode) {     //通常叫做内存流,写在内存中的     ByteArrayOutputStream outputStream = new ByteArrayOutputStream();     byte[] data = new byte[1024];     int len = 0;     String result = "";     if(inputStream != null){       try {         while((len = inputStream.read(data))!=-1){           data.toString();           outputStream.write(data, 0, len);         }         //result是在服务器端设置的doPost函数中的         result = new String(outputStream.toByteArray(),encode);         outputStream.flush();         outputStream.close();         inputStream.close();       } catch (IOException e) {         // TODO Auto-generated catch block         e.printStackTrace();       }     }     return result;   }   public static String set(String id,String name,int permission) {     // TODO Auto-generated method stub     Map<String, String> map = new HashMap<String, String>();     map.put("id", id);     map.put("name", name);     map.put("permission", String.valueOf(permission));     String result = AccountHttpUtils.sendHttpClient(AbstractHttpUtils.PATH+"servlet/AccountServler", map, "utf-8");     System.out.println("result:"+ result);     return result;   }  } 

  4.get请求访问的是百度,返回的是百度首页的源代码

        post是我的一个小项目中的类 

       不过结构已经很清晰啦。。。。

   留着备用。。。。。。

http://www.cnblogs.com/jycboy/p/httpclient.html