码迷,mamicode.com
首页 > 移动开发 > 详细

android之HttpClient

时间:2015-08-19 23:41:06      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:

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

android之HttpClient

标签:

原文地址:http://www.cnblogs.com/jycboy/p/httpclient.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!