Android应用开发之Android平台向web应用提交信息


GET方式

实验:提交视频名称、时长信息

url:

http://192.168.1.102:8080/videoweb/video/manage.do?method=save&name=xxx&timelength=90

资源

  1. <string name="app_name">VideoClient</string>  
  2.   
  3.    <string name="name">视频名称</string>  
  4.   
  5.    <string name="timeLength">时长</string>  
  6.   
  7.    <string name="save">保存</string>  
  8.   
  9.    <string name="success">数据保存成功</string>  
  10.   
  11.    <string name="fail">数据保存失败</string>  
  12.   
  13.    <string name="error">网络连接失败</string>  
  14.   
  15.    <string name="videoFile">视频文件</string>  

布局

  1. <TextView  
  2.   
  3.         Android:layout_width="fill_parent"  
  4.   
  5.         android:layout_height="wrap_content"  
  6.   
  7.         android:text="@string/name" />  
  8.   
  9.    
  10.   
  11.     <EditText  
  12.   
  13.         android:id="@+id/nameEt"  
  14.   
  15.         android:layout_width="match_parent"  
  16.   
  17.         android:layout_height="wrap_content" >  
  18.   
  19.    
  20.   
  21.         <requestFocus />  
  22.   
  23.     </EditText>  
  24.   
  25.    
  26.   
  27.     <TextView  
  28.   
  29.         android:layout_width="fill_parent"  
  30.   
  31.         android:layout_height="wrap_content"  
  32.   
  33.         android:text="@string/timeLength" />  
  34.   
  35.    
  36.   
  37.     <EditText  
  38.   
  39.         android:id="@+id/timeLengthEt"  
  40.   
  41.         android:layout_width="match_parent"  
  42.   
  43.         android:layout_height="wrap_content" >  
  44.   
  45.     </EditText>  
  46.   
  47.    
  48.   
  49.     <Button  
  50.   
  51.         android:id="@+id/saveBtn"  
  52.   
  53.         android:layout_width="wrap_content"  
  54.   
  55.         android:layout_height="wrap_content"  
  56.   
  57.         android:text="save" />  

VideoService

  1. public static boolean save(String name, String timeLength) throws Exception {  
  2.   
  3.        String path = "http://192.168.1.102:8080/videoweb/video/manage.do";  
  4.   
  5.        Map<String, String> params = new HashMap<String, String>();  
  6.   
  7.        params.put("name", name);  
  8.   
  9.        params.put("timelength", timeLength);  
  10.   
  11.        params.put("method", "save");  
  12.   
  13.    
  14.   
  15.        return sendPostRequestHttpClient(path, params, "UTF-8");  
  16.   
  17.     }  
  18.   
  19.    
  20.   
  21.     private static boolean sendPostRequestHttpClient(String path,  
  22.   
  23.            Map<String, String> params, String string) throws Exception {  
  24.   
  25.        // http://192.168.1.102:8080/videoweb/video/manage.do?method=save&name=xxx&timelength=90  
  26.   
  27.        StringBuilder pathBuilder = new StringBuilder(path);  
  28.   
  29.        pathBuilder.append("?");  
  30.   
  31.          
  32.   
  33.        for (Map.Entry<String, String> entry : params.entrySet()) {  
  34.   
  35.            pathBuilder.append(entry.getKey()).append("=")  
  36.   
  37.                   .append(entry.getValue()).append("&");  
  38.   
  39.        }  
  40.   
  41.        pathBuilder.deleteCharAt(pathBuilder.length() - 1);  
  42.   
  43.          
  44.   
  45.        URL url = new URL(pathBuilder.toString());  
  46.   
  47.        HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  48.   
  49.        conn.setRequestMethod("GET");  
  50.   
  51.        conn.setConnectTimeout(5000);  
  52.   
  53.        if (conn.getResponseCode() == 200) {  
  54.   
  55.            return true;  
  56.   
  57.        }  
  58.   
  59.        return false;  
  60.   
  61.     }  

测试方法代码

VideoServiceTest

  1. public void testSave() throws Throwable{  
  2.   
  3.       VideoService.save("Sucan", "80");  
  4.   
  5.    }  

中文字符解决方案:

服务器端代码:

  1. VideoForm formbean = (VideoForm)form;  
  2.   
  3. if("GET".equals(request.getMethod())){  
  4.   
  5.     String name = new String(request.getParameter("name")  
  6.   
  7. .getBytes("ISO8859-1"),"UTF-8");  
  8.   
  9.     System.out.println("视频名称: "+ name);  
  10.   
  11.     System.out.println("时长: "+formbean.getTimelength());  
  12.   
  13. }else{  
  14.   
  15.     System.out.println("视频名称: "+formbean.getName());  
  16.   
  17.     System.out.println("时长: "+formbean.getTimelength());  
  18.   
  19. }  

客户端的VideoService中

 

POST方式

修改服务器端代码

Index.jsp

  1. <form action="http://192.168.1.102:8080/videoweb/video/manage.do"  
  2.   
  3. method="post" >  
  4.   
  5.     <input type="hidden" name="method" value="save"><br/>  
  6.   
  7.     视频名称:<input type="text" name="name" value=""><br/>  
  8.   
  9.     时长:<input type="text" name="timelength" value=""><br/>  
  10.   
  11.       
  12.   
  13.     <input type="submit" value="提交">   
  14.   
  15. </form>      

利用HttpWatch对post传输进行简单讲解:

  1. POST /videoweb/video/manage.do HTTP/1.1  
  2.   
  3. Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*  
  4.   
  5. Referer: http://192.168.1.102:8080/videoweb/  
  6.   
  7. Accept-Language: zh-cn,en-GB;q=0.5  
  8.   
  9. User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727)  
  10.   
  11. Content-Type: application/x-www-form-urlencoded  
  12.   
  13. Accept-Encoding: gzip, deflate  
  14.   
  15. Host: 192.168.1.102:8080  
  16.   
  17. Content-Length: 34  
  18.   
  19. Connection: Keep-Alive  
  20.   
  21. Cache-Control: no-cache  
  22.   
  23. Cookie: JSESSIONID=AE51607F874103B085624AD38C68CF56  
  24.   
  25.    
  26.   
  27. method=save&name=xxxx&timelength=2  

编写业务类方法(VideoService)

  1. private static boolean sendPostRequestHttpClient(String path,  
  2.   
  3.            Map<String, String> params, String encoding) throws Exception {  
  4.   
  5.        /*  
  6.   
  7.         * Content-Type: application/x-www-form-urlencoded  
  8.   
  9.         * Content-Length: 34  
  10.   
  11.         * method=save&name=xxxx&timelength=2  
  12.   
  13.         */  
  14.   
  15.        StringBuffer sb = new StringBuffer("");  
  16.   
  17.        if (params != null && !params.isEmpty()) {  
  18.   
  19.            for (Map.Entry<String, String> entry : params.entrySet()) {  
  20.   
  21.               sb.append(entry.getKey()).append("=")  
  22.   
  23.               // .append(entry.getValue()).append("&");  
  24.   
  25.                      .append(URLEncoder.encode(entry.getValue(), encoding)).append('&'); //url编码,解决中文乱码  
  26.   
  27.            }  
  28.   
  29.            sb.deleteCharAt(sb.length() - 1);  
  30.   
  31.        }  
  32.   
  33.          
  34.   
  35.        byte[] data = sb.toString().getBytes(); //得到实体数据eg. method=save&name=xxxx&timelength=2  
  36.   
  37.        URL url = new URL(path);  
  38.   
  39.        HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  40.   
  41.        conn.setRequestMethod("POST");  
  42.   
  43.        conn.setConnectTimeout(5000);  
  44.   
  45.        conn.setDoOutput(true); //允许通过POST方式提交数据,必须允许输出  
  46.   
  47.        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");  
  48.   
  49.        conn.setRequestProperty("Content-Length", String.valueOf(data.length));  
  50.   
  51.          
  52.   
  53.        OutputStream outStream = conn.getOutputStream();  
  54.   
  55.        outStream.write(data);  
  56.   
  57.        outStream.flush();  
  58.   
  59.        outStream.close();  
  60.   
  61.          
  62.   
  63.        if (conn.getResponseCode() == 200) {  
  64.   
  65.            return true;  
  66.   
  67.        }  
  68.   
  69.        return false;  
  70.   
  71.     }  

修改save方法

  1. //     return sendGetRequestHttpClient(path, params, "UTF-8");  
  2.   
  3.        return sendPostRequest(path, params, "UTF-8");  
  • 1
  • 2
  • 下一页

相关内容