实现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 下载多张图片相关推荐

  1. 通过Web Services上传和下载图片文件

    通过Web Services上传和下载图片文件 随着Internet技术的发展和跨平台需求的日益增加,Web Services的应用越来越广,我们不但需要通过Web Services传递字符串信息,而 ...

  2. Jboss RestEasy构建简单的RESTful Web Services示例(1)

    2019独角兽企业重金招聘Python工程师标准>>> 项目上要用到webservice,鉴于现在restful webservice比较流行,打算用restful来建立webser ...

  3. Web services 安全实践: 基于 HTTP Basic Authentication 为 Web services 配置传输层安全机制...

    转载:http://www.ibm.com/developerworks/cn/webservices/1106_webservicessecurity/ 简介 正如"HTTP Basic ...

  4. RESTful Web Services in Spring 3(下)转载

    上一篇我主要发了RESTful Web Services in Spring 3的服务端代码,这里我准备写客户端的代码. 上篇得连接地址为:http://yangjizhong.iteye.com/b ...

  5. cxf开发Restful Web Services

    一.restful web services rest全称是Representation State Transfer(表述性状态转移).它是一种软件架构风格,只是提供了一组设计原则和约束条件.在re ...

  6. Java与.NET 的Web Services相互调用

    一:简介 本文介绍了Java与.NET开发的Web Services相互调用的技术.本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何用 ...

  7. MyEclipse开发教程:使用REST Web Services管理JPA实体(四)

    2019独角兽企业重金招聘Python工程师标准>>> MyEclipse 在线订购年终抄底促销!火爆开抢>> MyEclipse最新版下载 使用REST Web Ser ...

  8. 使用LoadRunner对Web Services进行调用--Add Service Call

    利用LoadRunner对Web Services进行测试时,通常有三种可供采用的方法: 在LoadRunner的Web Services虚拟用户协议中,[Add Service Call] 在Loa ...

  9. 利用Web Services实现软件自动升级

    摘 要:软件维护升级工作是软件生命周期最重要的环节.为了解决以往C/S(Client/Server)模式下的客户端软件升级效率低的问题,设计了C/S应用系统自动升级处理程序.该程序利用Web Serv ...

最新文章

  1. 是时候开始使用JavaScript严格模式了怎样启用javascri
  2. jquery插件treetable使用
  3. COJ 1008 WZJ的数据结构(八) 树上操作
  4. 8-Qt6 智能指针QPointer
  5. C#——扩展.NET Framework基本类型的功能DEMO
  6. BugKuCTF WEB web基础$_GET
  7. 机器学习必学10大算法
  8. 三天花三万!跟董事长女儿相亲却被骗财?世纪佳缘致歉杭州小吴并承诺赔偿...
  9. Centos下SVN环境部署记录
  10. 如果有因果报应和轮回,又是怎么管理的?
  11. 《遥感原理与应用》总结—遥感图像几何处理
  12. 手机的进化,离不开手机行业的“血海狂战”
  13. 悦保车牌识别相机优势
  14. 我的产品经理书单(2017-2019)
  15. 高德vue-amap使用(一)标记点位获取地址及经纬度
  16. echart 多种覆盖物 显示优先级
  17. txt文档在html中乱码怎么办,txt文件打开显示乱码怎么办?
  18. Android App 保活之 ADJ 算法
  19. CVE-2012-1889(暴雷)漏洞分析
  20. 回车键换行符回车符 朦胧中!

热门文章

  1. android 状态栏显示 耳机图标显示,Android4.0-4.4 加入支持状态栏显示耳机图标方法(支持带不带MIC的两种耳机自己主动识别)...
  2. 成长路上破局思维:工具化时间管理
  3. pcb小分享——PCB板组成部分有哪些?
  4. PCB板材的基本分类
  5. Holy Grail
  6. 微信抢票环境配置——nginx + uwsgi + django配置服务器
  7. mysql导出数据库1146_MySQL复制出错 Last_SQL_Errno:1146的解决方法
  8. linux导入iou iol的方法,网络实验环境搭建--3.如何使用IOL/IOU
  9. 如何取悦自己或者增加自己幸福感的方式
  10. WEB在线客服系统(websocket+Golang)