当前位置:编程学习 > XML/UML >>

Android流方式发送XML数据

 

我们可以采用请求参数的形式向服务器发送数据,但是当数据太大时,此方法不可用,此时我们应该采用流的方式发送数据,下面这个例子是将一个xml文件的内容以字节流的形式发送给服务器

 

1.新建一个web项目,由于我使用了struts2,需要引入相关的jar包并配置相应的环境。

2.新建一个action

Java代码 

package com.lamp.action; 

 

import java.io.ByteArrayOutputStream; 

import java.io.InputStream; 

 

import javax.servlet.http.HttpServletRequest; 

 

import org.apache.struts2.ServletActionContext; 

 

public class XMLDataAction { 

     

    //通过输入流获得字节数组 

    public static byte[] readStream(InputStream is) throws Exception { 

        byte[] buffer = new byte[1024]; 

        ByteArrayOutputStream bos = new ByteArrayOutputStream(); 

        int len = 0; 

        while((len=is.read(buffer)) != -1){ 

            bos.write(buffer, 0, len); 

        }  

        is.close(); 

        return bos.toByteArray(); 

    } 

     

    public String execute() throws Exception { 

        //获得HttpServletRequest对象 

        HttpServletRequest request = ServletActionContext.getRequest(); 

        //从客户端获得输入流 

        InputStream is = request.getInputStream(); 

        byte[] data = readStream(is); 

        String str = new String(data,"UTF-8"); 

        if(str != null){ 

            System.out.println(str); 

            return "success"; 

        } 

        return "error"; 

    } 

 

 

3.在struts.xml中对action进行相关配置

Xml代码 

<package name="lamp" extends="struts-default">         

      <action name="XMLData" class="com.lamp.action.XMLDataAction"> 

        <result name="success">/WEB-INF/page/success.jsp</result> 

        <result name="error">/WEB-INF/page/error.jsp</result> 

      </action> 

  </package> 

 

 

4.新建一个Android工程,并写一个工具类将数据流发送给服务器端

Java代码 

package com.lamp.util; 

 

import java.io.ByteArrayOutputStream; 

import java.io.DataOutputStream; 

import java.io.InputStream; 

import java.net.HttpURLConnection; 

import java.net.URL; 

 

public class NetTool { 

     

         

    //以流方式向服务器端发送xml文件数据,并获得服务器端输出流 

    public static InputStream sendXMLData(String urlPath,byte[] data,String encoding) throws Exception{ 

        URL url = new URL(urlPath); 

        //打开连接 

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

        //设置提交方式 

        conn.setDoOutput(true); 

        conn.setDoInput(true); 

        conn.setRequestMethod("POST");  

        //post方式不能使用缓存 

        conn.setUseCaches(false); 

        conn.setInstanceFollowRedirects(true); 

        //设置连接超时时间 

        conn.setConnectTimeout(6*1000); 

        //配置本次连接的Content-Type 

        conn.setRequestProperty("Content-Type", "text/html;charset=UTF-8"); 

        //维持长连接 

        conn.setRequestProperty("Connection", "Keep-Alive"); 

        //设置浏览器编码 

        conn.setRequestProperty("Charset", "UTF-8"); 

        DataOutputStream dos = new DataOutputStream(conn.getOutputStream()); 

        //将请求参数数据向服务器端发送 

        dos.write(data); 

        dos.flush(); 

        dos.close(); 

        if(conn.getResponseCode() == 200){ 

            //获得服务器端输出流 

            return conn.getInputStream(); 

        } 

        return null; 

    } 

     

    //通过输入流获得字节数组 

    public static byte[] readStream(InputStream is) throws Exception { 

        byte[] buffer = new byte[1024]; 

        ByteArrayOutputStream bos = new ByteArrayOutputStream(); 

        int len = 0; 

        while((len=is.read(buffer)) != -1){ 

            bos.write(buffer, 0, len); 

        }  

        is.close(); 

        return bos.toByteArray(); 

    } 

     

 

 

5.编

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,