Android数据与服务器交互的GET,POST,HTTPGET,HTTPPOST的使用

 

Android有这几种方式,可以提交数据到服务器,他们是怎么使用的呢,这里我们来探讨一下。

这里的例子用的都是提交客户端的用户名及密码,同时本节用到的StreamTools.readInputStream(is);作用是把输入流转化为字符串,是一个公共类。我在前面介绍过了。http://www.cnblogs.com/fengtengfei/p/3969520.html,这里就不在重复的说明了。

第一种:GET

关键部分是:

首先我们用URL包装访问的路径,由于是get请求,在学习javaWEB的时候我们就以及知道了,路径中要把提交的参数拼装。

然后我们openConnection(),其返回的是HttpURLConnection对象,拿到这个对象我们就可以进行相关参数,及超时的设置,以及获取服务器的返回码了。

			URL url = new URL(path);

			HttpURLConnection conn = (HttpURLConnection) url.openConnection();

			conn.setConnectTimeout(5000);

			conn.setRequestMethod("GET");

			int code = conn.getResponseCode();

 

example:

 1 public static String loginByGet(String username,String password) {

 2         //提交数据到发服务器

 3         String path = null;

 4         try {

 5             path = "http://192.168.254.100:8080/web/LoginServlet?username="+URLEncoder.encode(username,"utf-8")+"&password="+password;

 6         } catch (UnsupportedEncodingException e1) {

 7             // TODO Auto-generated catch block

 8             e1.printStackTrace();

 9         }

10         

11         try {

12             URL url = new URL(path);

13             

14             HttpURLConnection conn = (HttpURLConnection) url.openConnection();

15             conn.setConnectTimeout(5000);

16             conn.setRequestMethod("GET");

17             

18             

19             int code = conn.getResponseCode();

20             if(code==200){

21                 //请求成功

22                 InputStream is = conn.getInputStream();

23                 String result = StreamTools.readInputStream(is);

24                 

25                 return result;

26             }else{

27                 return null;

28             }

29             

30             

31         } catch (Exception e) {

32             // TODO Auto-generated catch block

33             e.printStackTrace();

34             return null;

35         }

36         

37     }

 

第二种:Post

在网页的get与post的请求的对比中我们知道post比get多了几个参数,所以这里我们也是要对相关参数进行设置的,

首先我们要设置的是Content-type与Cotent-Length,

	           String data = "username="+URLEncoder.encode(username,"utf-8")+"&password="+password;

			conn.setRequestProperty("Content-Type:", "application/x-www-form-urlencoded");

			conn.setRequestProperty("Content-Length:", data.length()+"");

 其次,post的方式,实际上是浏览器把数据写给服务器。所以我们要设置相关参数,让服务器允许我们有写的权限,

	          conn.setDoOutput(true);

			OutputStream os = conn.getOutputStream();

			os.write(data.getBytes());

 example

 1 public static String loginByPost(String username,String password){

 2         //POST提交数据到发服务器

 3         String path = "http://192.168.254.100:8080/web/LoginServlet";

 4         

 5         try {

 6             URL url = new URL(path);

 7             

 8             HttpURLConnection conn = (HttpURLConnection) url.openConnection();

 9             conn.setConnectTimeout(5000);

10             conn.setRequestMethod("POST");

11             //准备数据,计算其长度

12             String data = "username="+URLEncoder.encode(username,"utf-8")+"&password="+password;

13             conn.setRequestProperty("Content-Type:", "application/x-www-form-urlencoded");

14             conn.setRequestProperty("Content-Length:", data.length()+"");

16             //post的方式,实际上是浏览器把数据写给服务器。

17             //允许写数据

18             conn.setDoOutput(true);

19             OutputStream os = conn.getOutputStream();

20             os.write(data.getBytes());

21             System.out.println("2");

22             

23             int code = conn.getResponseCode();25             if(code==200){

26                 //请求成功

27                 InputStream is = conn.getInputStream();

28                 String result = StreamTools.readInputStream(is);

29                 

30                 return result;

31             }else{

32                 return null;

33             }

34             

35             

36         } catch (Exception e) {

37             // TODO Auto-generated catch block

38             e.printStackTrace();

39             return null;

40         }

41         

42     }

 

第三种:httpclientget

使用步骤是,我们首先要实例化一个HttpClient的对象,同时也要实例一个HttpGet的对象,让HttpClient的对象去execute(HttpGet的对象),这时我们可以得到HttpResponse的对象,二者就是服务器的返回的对象,所以区别就在这里了。

这里的返回码是这样获得的response.getStatusLine().getStatusCode();使用中要注意。

 

example:

public static String loginByHttpClientGet(String username,String password){

        try {

            HttpClient client = new DefaultHttpClient();

            String path = "http://192.168.254.100:8080/web/LoginServlet?username="

            +URLEncoder.encode(username)+"&password="+URLEncoder.encode(password);

            HttpGet httpGet = new HttpGet(path);

            //执行操作。敲回车

            HttpResponse response = client.execute(httpGet);

            int code = response.getStatusLine().getStatusCode();

            if(code==200){

                //请求成功

                InputStream is = response.getEntity().getContent();

                String result = StreamTools.readInputStream(is);

                

                return result;

            }else{

                return null;

            }

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

            return null;

        }



    }

 

第四种:httpclientpost

采用HttpClientPost的方式与HttpClientGet的方式的区别是HttpPost要指定提交的数据实体,而这里的实现就像是map,所以对于参数较多的时候,这种方式是最为便捷的。

	                List<NameValuePair> parameters = new ArrayList<NameValuePair>();

			parameters.add(new BasicNameValuePair("username", username));

			parameters.add(new BasicNameValuePair("password", password));            

 example:

public static String loginByHttpClientPost(String username,String password){

        try {

            HttpClient client = new DefaultHttpClient();

            String path = "http://192.168.254.100:8080/web/LoginServlet";

            HttpPost post = new HttpPost();

            //指定要提交的数据实体

            List<NameValuePair> parameters = new ArrayList<NameValuePair>();

            parameters.add(new BasicNameValuePair("username", username));

            parameters.add(new BasicNameValuePair("password", password));

            post.setEntity(new UrlEncodedFormEntity(parameters, "utf-8"));

            

            HttpResponse response = client.execute(post);

            

            int code = response.getStatusLine().getStatusCode();

            if(code==200){

                //请求成功

                InputStream is = response.getEntity().getContent();

                String result = StreamTools.readInputStream(is);

                

                return result;

            }else{

                return null;

            }

            

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

            return null;

        }

    }

 

作者:Darren

微博:@IT_攻城师

出处:http://www.cnblogs.com/fengtengfei/

 

你可能感兴趣的:(android)