在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)                            创建HttpGetHttpPost 对象,将要请求的URL通过构造方法传入HttpGetHttpPost对象

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();