展会信息港展会大全

Android软件开发教程之使用流方式发送XML数据
来源:互联网   发布日期:2015-09-28 16:20:00   浏览:2211次  

导读:我们可以采用请求参数的形式向服务器发送数据,但是当数据太大时,此方法不可用,此时我们应该采用流的方式发送数据,下面这个例子是将一个xml文件的内容以字节流的形式发送给服务器。1、新建一个web项目,由于我......

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

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

2、新建一个action

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进行相关配置

<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工程,并写一个工具类将数据流发送给服务器端

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、编写一个测试类对对其进行测试

package com.lamp.activity;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.InputStream;

import android.os.Environment;

import android.test.AndroidTestCase;

import android.util.Log;

import com.lamp.util.NetTool;

public class TestPostData extends AndroidTestCase {

private static final String TAG = "TestPostData";

// 以流的方式向服务器发送数据

public void testSendXML() throws Exception {

String urlPath = "http://ip地址:8080/TestAndroid/XMLData";

// 从sdk卡中读取persons.xml文件

File file = new File(Environment.getExternalStorageDirectory(),

"persons.xml");

InputStream is = new FileInputStream(file);

byte[] data = NetTool.readStream(is);

is = NetTool.sendXMLData(urlPath, data, "UTF-8");

data = NetTool.readStream(is);

Log.i(TAG, new String(data));

}

}

6、记得要在AndroidManifest.xml文件中注册访问网络权限以及单元测试所需的配置

<uses-permission android:name="android.permission.INTERNET"/>

赞助本站

人工智能实验室

相关热词: 流方式 发送 XML

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港