Web Services Ksoap 下载多张图片
实现Android客户端接收Web Services服务端传输的多张图片并显示的功能。
Web Services 服务端:
@WebService
public interface ITransPic {
@WebResult(name = "getPictures")
public FileDto transPic(@WebParam(name="folderName") String folderName);
}
注明:因为是测试代码,入参folderName在后面并未使用。
public class TransPicImpl implements ITransPic {
ArrayList<PicFile> fileList = null;
FileInputStream fis = null; //文件流对象
PicFile picFile = null; //文件图片对象
ByteArrayOutputStream bos = null;
File file = null;
byte[] buffer = null;
FileDto fileDto = new FileDto();
String filePath = "F:\\Desktop\\pictures";
@Override
public FileDto transPic(String folderName) {
// TODO Auto-generated method stub
fileList = new ArrayList<PicFile>();
try {
file = new File(filePath);
File[] array = file.listFiles();
System.out.println("共有"+array.length+"张图片");
//读取每张图片
for (int i = 0; i < array.length; i++){
picFile = new PicFile();
fis = new FileInputStream(filePath+"\\"+(i+1)+".jpg");
bos = new ByteArrayOutputStream();
buffer = new byte[8092];
int count = 0;
while((count = fis.read(buffer)) > 0){
bos.write(buffer, 0, count);
}
String downloadBuffer = new String(Base64.encode(bos.toByteArray()));
picFile.setFileName((i+1)+".jpg");
picFile.setDownloadBuffer(downloadBuffer);
fileList.add(picFile);
}
fileDto.setFileLenth(array.length);
fileDto.setFileList(fileList);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return fileDto;
}
}
其中FileDto的代码为:
public class FileDto {
private ArrayList<PicFile> fileList;
private int fileLenth;
@XmlElementWrapper(name = "files")
@XmlElements(@XmlElement(name = "file", type = PicFile.class))
public ArrayList<PicFile> getFileList() {
return fileList;
}
public void setFileList(ArrayList<PicFile> fileList) {
this.fileList = fileList;
}
public int getFileLenth() {
return fileLenth;
}
public void setFileLenth(int fileLenth) {
this.fileLenth = fileLenth;
}
}
PicFile包括fileName(文件名)与downloadBuffer两个属性。
服务发布后的wsdl为:
在浏览器中输入调用方法transPic的URL:http://localhost:8080/WSPic/TransPicService/transPic?folderName=1,显示:
可以看到files就是@XmlElementWrapper的名字,其下有10个以“file”命名的PicFile对象。利用@XmlElementWrapper、@XmlElements等注释,可以帮助Android客户端解析xml格式的数据。
其中,每个file的xml数据为:
说明:由于Java WebService传入参数的特殊性(虽然定义的参数是Java支持的参数,但是通过链接传入的参数的类型都为String),所以图片需要通过Base64编码,转化为String类型。
Android客户端:
需要的jar包:commons-codec-1.7.jar以及Ksoap的jar包。
public class WebService {
private final String NAME_SPACE = "http://service.yan.cn/";
private final String URL = "http://192.168.10.200:8080/WSPic/TransPicService";
private final String GET_METHOD_NAME = "transPic";
private final String GET_RESPONSE_OPERATION="http://192.168.10.200:8080/WSPic/TransPicService/transPic";
private ArrayList<PicFile> picFileList = new ArrayList<PicFile>();
private PicFile picFile = null;
private int fileNumber = 0;
public ArrayList<PicFile> getPicByte(){
SoapObject rpc = new SoapObject(NAME_SPACE,GET_METHOD_NAME);
rpc.addProperty("folderName","12");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = rpc;
envelope.setOutputSoapObject(rpc);
AndroidHttpTransport ht = new AndroidHttpTransport(URL);//用http传输,wsdl地址
ht.debug = true;//允许调试
try {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("调用call之前时间:"+df.format(new Date()));
ht.call(GET_RESPONSE_OPERATION, envelope);
System.out.println("调用call之后时间:"+df.format(new Date()));
System.out.println("envelop=="+envelope);
SoapObject detail =(SoapObject)envelope.getResponse();
SoapObject result = (SoapObject)detail.getProperty("files");
System.out.println("fileNumber初始值=="+fileNumber);
fileNumber = result.getPropertyCount();
System.out.println("fileNumber=="+fileNumber);
//一次取出fileNumber张图片
for (int i = 0; i < fileNumber; i ++){
SoapObject tempObject = (SoapObject)result.getProperty(i);
picFile = new PicFile();
picFile.setDownloadBuffer(tempObject.getProperty("downloadBuffer").toString());
picFile.setFileName(tempObject.getProperty("fileName").toString());
picFileList.add(picFile);
}
} catch (Exception e) {
e.printStackTrace();
}
return picFileList;
}
}
至此,picFileList已包含所有图片的信息。若要显示图片,用Base64解码即可:
for (int i = 0; i < filePicList.size(); i++){
buffer = new Base64().decode(filePicList.get(i).getDownloadBuffer());
imgeViewList.get(i).setImageBitmap(BitmapFactory.decodeByteArray(buffer, 0, buffer.length));
}
转载于:https://blog.51cto.com/6584365/1159828
Web Services Ksoap 下载多张图片相关推荐
- 通过Web Services上传和下载图片文件
通过Web Services上传和下载图片文件 随着Internet技术的发展和跨平台需求的日益增加,Web Services的应用越来越广,我们不但需要通过Web Services传递字符串信息,而 ...
- Jboss RestEasy构建简单的RESTful Web Services示例(1)
2019独角兽企业重金招聘Python工程师标准>>> 项目上要用到webservice,鉴于现在restful webservice比较流行,打算用restful来建立webser ...
- Web services 安全实践: 基于 HTTP Basic Authentication 为 Web services 配置传输层安全机制...
转载:http://www.ibm.com/developerworks/cn/webservices/1106_webservicessecurity/ 简介 正如"HTTP Basic ...
- RESTful Web Services in Spring 3(下)转载
上一篇我主要发了RESTful Web Services in Spring 3的服务端代码,这里我准备写客户端的代码. 上篇得连接地址为:http://yangjizhong.iteye.com/b ...
- cxf开发Restful Web Services
一.restful web services rest全称是Representation State Transfer(表述性状态转移).它是一种软件架构风格,只是提供了一组设计原则和约束条件.在re ...
- Java与.NET 的Web Services相互调用
一:简介 本文介绍了Java与.NET开发的Web Services相互调用的技术.本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何用 ...
- MyEclipse开发教程:使用REST Web Services管理JPA实体(四)
2019独角兽企业重金招聘Python工程师标准>>> MyEclipse 在线订购年终抄底促销!火爆开抢>> MyEclipse最新版下载 使用REST Web Ser ...
- 使用LoadRunner对Web Services进行调用--Add Service Call
利用LoadRunner对Web Services进行测试时,通常有三种可供采用的方法: 在LoadRunner的Web Services虚拟用户协议中,[Add Service Call] 在Loa ...
- 利用Web Services实现软件自动升级
摘 要:软件维护升级工作是软件生命周期最重要的环节.为了解决以往C/S(Client/Server)模式下的客户端软件升级效率低的问题,设计了C/S应用系统自动升级处理程序.该程序利用Web Serv ...
最新文章
- 是时候开始使用JavaScript严格模式了怎样启用javascri
- jquery插件treetable使用
- COJ 1008 WZJ的数据结构(八) 树上操作
- 8-Qt6 智能指针QPointer
- C#——扩展.NET Framework基本类型的功能DEMO
- BugKuCTF WEB web基础$_GET
- 机器学习必学10大算法
- 三天花三万!跟董事长女儿相亲却被骗财?世纪佳缘致歉杭州小吴并承诺赔偿...
- Centos下SVN环境部署记录
- 如果有因果报应和轮回,又是怎么管理的?
- 《遥感原理与应用》总结—遥感图像几何处理
- 手机的进化,离不开手机行业的“血海狂战”
- 悦保车牌识别相机优势
- 我的产品经理书单(2017-2019)
- 高德vue-amap使用(一)标记点位获取地址及经纬度
- echart 多种覆盖物 显示优先级
- txt文档在html中乱码怎么办,txt文件打开显示乱码怎么办?
- Android App 保活之 ADJ 算法
- CVE-2012-1889(暴雷)漏洞分析
- 回车键换行符回车符 朦胧中!
热门文章
- android 状态栏显示 耳机图标显示,Android4.0-4.4 加入支持状态栏显示耳机图标方法(支持带不带MIC的两种耳机自己主动识别)...
- 成长路上破局思维:工具化时间管理
- pcb小分享——PCB板组成部分有哪些?
- PCB板材的基本分类
- Holy Grail
- 微信抢票环境配置——nginx + uwsgi + django配置服务器
- mysql导出数据库1146_MySQL复制出错 Last_SQL_Errno:1146的解决方法
- linux导入iou iol的方法,网络实验环境搭建--3.如何使用IOL/IOU
- 如何取悦自己或者增加自己幸福感的方式
- WEB在线客服系统(websocket+Golang)