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 ,