在Android SDK 中  可以采取多种方式使用HTTP

eg:HttpURLConnection  HttpGet  HttpPost  and so on... 下面就开始初略的介绍一下:

在Android SDK 中集成了Apache HttpClient 模块,但是 注意:这里的 Apache HttpClient 模块是HttpClient4.0(org.apache.http.*)

 一)  HttpClient模块中涉及到两个重要的类:一个是HttpGet and  HttpPost

       用这两个类来提交请求、

   无论用get  还是 post 他们的 步骤 不外乎以下几步:

a)                            创建HttpGet或HttpPost 对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象

b)                            使用DefaultHttpClient类的execute方法发送HTTP Get 或 HTTP Post 请求,并返回HttpResponse对象

c)                            通过HttpResponse 接口的getEntity 方法返回响应信息,并进行相应的处理

当然 使用 Post 会比较麻烦, 必须使用HttpPost类的setEntity方法给他设置参数

 

HttpGet 请求代码:
            HttpClient mClient = new DefaultHttpClient();
                                      //  这个是你机器的ip,访问的是一张图
             HttpGet request= new HttpGet("http://192.168.1.121:80/a2.png");
             try {

                 HttpResponse response = mClient .execute(request);
                 if (response.getStatusLine().getStatusCode() == 200) {
                     //  这样 得到一个输入流
                     InputStream is = response.getEntity().getContent();                    //把通过BitmapFactory  把流转化成一个bitmap对象
                     Bitmap bitmap = BitmapFactory.decodeStream(is);
                     mImageView.setImageBitmap(bitmap);
                 } else {
                     mImageView.setImageResource(R.drawable.ic_launcher);
                 }
             } catch (ClientProtocolException e) {
                 e.printStackTrace();
             } catch (IOException e) {
                 e.printStackTrace();
             }  HttpPost 请求的代码样例:
HttpClient client2 = new DefaultHttpClient();
             HttpPost post = new HttpPost(
                     "http://192.168.1.121:8080/MyServlet/queryServlet");//设置HTTP POST请求参数必须用NameValuePair对象
             List<NameValuePair> params = new ArrayList<NameValuePair>();
             params.add(new BasicNameValuePair("name", "Mars"));
             try {
                 post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
                 HttpResponse response = client2.execute(post);
                 if (response.getStatusLine().getStatusCode() == 200) {
                     String str = EntityUtils.toString(response.getEntity());
                     mTextView.setText(str);
                 } else {
                     mTextView.setText("连接失败");
                 }
             } catch (UnsupportedEncodingException e) {
                 e.printStackTrace();
             } catch (ClientProtocolException e) {
                 e.printStackTrace();
             } catch (IOException e) {
                 e.printStackTrace();
             }

 

get请求 和post请求有什么区别呢?

           
1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5. get安全性非常低,post安全性较高。但是执行效率却

 

当然建议:

1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式; 
 2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;    
   HttpURLConnection类
 java.net.HttpURLConnection  类是另一种访问HTTP资源的方式   
而且HttpURLConnection 具有完全的访问能力, 可以取代HttpGet  和HttpPost 
使用HttpURLConnection 访问的步骤如下:
a)  使用java.net.URL 封装的HTTP资源的url,并且使用openConnection 方法获得HttpUrlConnection对象:
eg: URL url = new URL(""http://192.168.1.121:8080/a2.png");
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();
b) 设置请求方法,eg:GET, POST 等等
conn.setRequestMethod("POST"); // note :参数必须大写
c)  z 设置输入输出和其他权限
     //  下载资源,需要将setDoInput方法的参数设为true
    conn.setDoInput(true);
     //  上传数据 将setDoOutput 方法的参数设为true
     conn.setDoOutput(true);
  // 禁止使用缓存:
 conn.setUseCaches(true);
这里就不多说了,都是API的使用;
d)  设置HTTP请求头
eg:conn.setRequestProperty("Charser",UTF-8);
e)   输入 输出数据:这里就是资源的读写操作,那就要用到I/O 了
  eg:    InputStream is = conn.getInputStream();
        OutputStream os = conn.getOutpustStream();
f)  流用完了 别忘了关哦:
   is.close();
   os.close();