首页 > 代码库 > Android数据与服务器交互的GET,POST,HTTPGET,HTTPPOST的使用

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 block33             e.printStackTrace();34             return null;35         }36         37     }

 

第二种:Post

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

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

	           String data = "http://www.mamicode.com/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 = "http://www.mamicode.com/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 block38             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数据与服务器交互的GET,POST,HTTPGET,HTTPPOST的使用