- 浏览: 113337 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
zhangchixtacbn:
能否发一份代码参考一下,谢谢。554242516@qq.com ...
DWZ整合struts2笔记 -
tuimaochang:
你好,这个有完整的源码吗?里面的对话框/图片资源用我自己的看不 ...
ActivityGroup + ViewPager 实现可滑动的底部Tab -
lintghi:
...
教你如何提高eclipse速度 -
119568242:
...
解决Bitmap读取频发OOM -
thunder_yan:
beat_it_ 写道能不能给份代码啊?上面不就是一个例子吗? ...
DWZ整合struts2笔记
有时我们可以看到,图片往往被提交到服务器端,这里我通过XFire框架来实现远程上传以及下载图片的功能。
首先我们来看看从服务器端下载图片的功能:
我用的是KSOAP框架,我之前的文章有讲述过。在这里不要多说,贴上代码。
首先我们看看Acitivity中的代码:
package com.net.connect.app; import java.io.File; import java.io.FileInputStream; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import com.base.encry.decry.app.Base64; import com.base.file.util.FileOperate; import com.cn.blogs.ksoap.app.MyWebServiceHelper; public class UpAndDownPicFileActivity extends Activity { ImageView imageView; public static final String filename = "xfire.png"; public static final String fileDir = "/sdcard/xmlfile/"; public MyWebServiceHelper myWebServiceHelper = new MyWebServiceHelper(); @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.upanddownpic); imageView = (ImageView) this.findViewById(R.id.imageView1); // Bitmap // bitmap=BitmapFactory.decodeFile("/sdcard/xmlfile/"+"xfire.png"); // imageView.setImageBitmap(bitmap); Button downButton = (Button) findViewById(R.id.downbutton); downButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub myWebServiceHelper.getTranferFileString(filename); // 收到服务器端发送过来的图片,然后显现在图片框中 Bitmap bitmap = BitmapFactory.decodeFile(fileDir + filename); imageView.setImageBitmap(bitmap); } }); Button upButton = (Button) findViewById(R.id.upbutton); upButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String fileContent = ""; FileOperate.OpenOrCreateFile(filename); fileContent = FileOperate.bin2XmlString(fileDir+filename); // Toast.makeText(UpAndDownPicFileActivity.this, fileContent, Toast.LENGTH_LONG).show(); String result=myWebServiceHelper.upToServerOfFileStringWithEncode(filename, fileContent); try { Thread.currentThread().sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Toast.makeText(UpAndDownPicFileActivity.this, result, Toast.LENGTH_LONG).show(); // 收到服务器端发送过来的图片,然后显现在图片框中 //imageView.setImageBitmap(null); } }); } }
分别实现了远程上传和下载图片的功能。它的处理类集中在MyWebServiceHelper,它实现了远程获取和上传的细节功能。
这个功能都是通过KSOAP框架实现的。下面贴上它的代码,如下所示:
// WSDL文档中的命名空间 private static final String targetNameSpace = "http://android.googlepages.com/"; // WSDL文档中的URL private static final String WSDL = "http://10.10.178.71:8888/WSDLApp/services/MyService"; // 需要调用的方法名(获得Myervices中的helloWorld方法) private static final String getHelloworld = "helloWorld"; //需要调用的方法名(获得Myervices中的login方法) private static final String getLogin="login"; //获取加密图片的字符串 private static final String getTranferFileStringWithEncode="tranferFileStringWithEncode"; //获取加密图片的字符串 private static final String upToServerOfFileContent="fetchFileStringWithEncode"; public String getTranferFileString(String filename) { String fileContent = ""; SoapObject soapObject = new SoapObject(targetNameSpace,getTranferFileStringWithEncode); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = false; envelope.setOutputSoapObject(soapObject); HttpTransportSE httpTranstation=new HttpTransportSE(WSDL); try { httpTranstation.call(targetNameSpace + getTranferFileStringWithEncode, envelope); SoapObject result = (SoapObject ) envelope.bodyIn;//getResponse(); fileContent=(String) result.getProperty(0).toString(); //String strFile="downfromserive"+Math.random()+".png"; FileOperate.OpenOrCreateFile(filename); FileOperate.xmlString2Bin(fileContent, new File(filename)); // 也可以通过下面方式获得str // SoapPrimitive result = (SoapPrimitive ) envelope.getResponse(); // str=result.toString(); // 直指value字符串值 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } return fileContent; } public String upToServerOfFileStringWithEncode(String filename,String fileContent) { String str = ""; SoapObject soapObject = new SoapObject(targetNameSpace,upToServerOfFileContent); soapObject.addProperty("filename", filename); soapObject.addProperty("fileContent", fileContent); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = false; envelope.setOutputSoapObject(soapObject); HttpTransportSE httpTranstation=new HttpTransportSE(WSDL); try { httpTranstation.call(targetNameSpace + upToServerOfFileContent, envelope); SoapObject result = (SoapObject ) envelope.bodyIn;//getResponse(); str=(String) result.getProperty(0).toString(); //返回上传成功0,1标志位 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return e.getMessage(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); return e.getMessage(); } return str; }
在第二个函数中有:
SoapObject soapObject = new SoapObject(targetNameSpace,upToServerOfFileContent); soapObject.addProperty("filename", filename); soapObject.addProperty("fileContent", fileContent);
这个是android客户端传送服务器端的参数参数。
而里面有个FileOperate.java类,这个类负责对文件操作。我封装在这个类中,方便集中处理以及调用。
下面贴上代码。如下所示:
package com.base.file.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import com.base.encry.decry.app.Base64; public class FileOperate { //在SD卡中创建文件 public static void OpenOrCreateFile(String filename){ // 获取扩展SD卡设备状态 String sDStateString = android.os.Environment .getExternalStorageState(); if (sDStateString.equals(android.os.Environment.MEDIA_MOUNTED)) { // String strFile="downfromserive"+Math.random()+".png"; // 获取扩展存储设备的文件目录 File SDFile = android.os.Environment .getExternalStorageDirectory(); File destDir = new File("/sdcard/xmlfile"); // File destDir = new File(SDFile.getAbsolutePath() + // destDirStr); if (!destDir.exists()) destDir.mkdir(); // Toast.makeText(SDCardTest., text, duration) // 打开文件 File myFile = new File(destDir + File.separator + filename); // 判断是否存在,不存在则创建 if (!myFile.exists()) { try { myFile.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } //删除指定文件,比如临时文件 public static void removeFile(String filename){ if(new File(filename).exists()) new File(filename).delete(); } //解密,并将内容写入至指定文件中 public static boolean xmlString2Bin(String base64String, File file) { byte[] data; FileOutputStream output = null; boolean ret = false; try { data = Base64.decode(base64String); output = new FileOutputStream(file); output.write(data); output.close(); ret = true; } catch (Exception e) { e.printStackTrace(); } return ret; } //将文件内容加密 public static String bin2XmlString(String filename) { byte[] data = null; FileInputStream input = null; String ret = null; int n; try { data = new byte[(int) new File(filename).length()]; input = new FileInputStream(new File(filename)); n = input.read(data);//这个就是一个文件读取过程。没有写while,一次性读完 input.close(); ret = new String(Base64.encode(data)); } catch (Exception e) { e.printStackTrace(); } return ret; } }
当然,我们还在看看这个Activity.java中的布局文件。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/downbutton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="下载" /> <Button android:id="@+id/upbutton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="上传" /> <ImageView android:id="@+id/imageView1" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
而服务器端用的是XFire框架,这在之前的文章中讲过。不必多说。
看下面的代码:
在AccountImp.java中实现IAccount.java方法。
public String tranferFileStringWithEncode() { // TODO Auto-generated method stub return FileOperate.bin2XmlString("E://Workspaces//workspace//WSDLApp//"+"girl.png"); } public String fetchFileStringWithEncode(String filename, String fileContent) { // TODO Auto-generated method stub //创建该新文件,并返回成功 try { //打开并创建文件 FileOperate.OpenOrCreateFile(filename); String pathFile="E://Workspaces//workspace//WSDLApp"; //解密,并将内容添加至该文件中 FileOperate.xmlString2Bin(fileContent, new File("E://Workspaces//workspace//WSDLApp//xfire.png")); return "上传成功"; } catch (Exception e) { // TODO: handle exception return "上传失败"; } }
IAccount.java
//将 POJO 发布成 Web 服务:有两种方法,接口和实现类是其中之一 public interface IAccount { public int account(int x,int y); public String helloWorld(String str); //访问mysql数据库 public int login(String username,String password); //传送图片字符串 public String tranferFileStringWithEncode(); //接收远程传送过来的图片字符串 public String fetchFileStringWithEncode(String username,String filename); }
而这个XFIRE要在web.xml中注册.
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>XFireServlet</servlet-name> <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>XFireServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
这样Web服务就用去查找services目录下。所以还要在WebServices目录下(在该服务器端要目录下)创建
services.xml文件。如下所示:
<!-- 服务一:简单计算,直接输出 --> <service> <name>MyService</name> <serviceClass>test.IAccount</serviceClass> <implementationClass>test.AccountImp</implementationClass> <mce:style><!-- wrapped --></mce:style><style mce_bogus="1">wrapped</style> <use>literal</use> <scope>application</scope> <namespace>http://android.googlepages.com/</namespace> </service>
最终实现效果如下所示:
点击下载按钮
评论
2 楼
vxiaoshui
2012-08-11
会有这些错SoapObject cannot be resolved to a type,SoapSerializationEnvelope cannot be resolved to a type,怎么解决?
1 楼
vxiaoshui
2012-08-11
我想问一下soapObject类怎么写?
发表评论
-
Android 实现圆形Panel ListView
2012-12-04 18:32 1389(效果如上图所示) 其实很简单: 比方说上面的容 ... -
Android WIFI热点工具
2012-10-28 02:09 3443Hello Thunder夜未眠, 午夜时分, 发布一个小工具 ... -
Android 2.3+ 使用StrictMode
2012-09-21 14:47 0ANR窗口产生的原因是多种多样的。程序的主线程因为IO读 ... -
内存泄露 on Android
2012-09-21 14:41 11111.资源对象没关闭造成的内存泄漏 描述: 资源性对象 ... -
Android 高效编程
2012-09-21 14:36 13871.使用本地方法 当 ... -
Android, BaseAdapter 处理大数据量时的优化
2012-09-21 14:23 7418Android优化 最常见的就是ListView, Galle ... -
SQLite优化方法
2012-09-21 13:50 34881.建表优化 SQLite的数据库本质文件读写操作,频 ... -
Android SQLite插入优化
2012-09-21 13:48 1385最初代码如下,直接执行sql语句,外加事务提升性能: ... -
解决Bitmap读取频发OOM
2012-08-25 09:48 1352/** * Bitmap 工具包 * @author ... -
ActivityGroup + ViewPager 实现可滑动的底部Tab
2012-07-01 17:28 6941首先看看布局文件 main.xml <?xml ... -
Android 使用des算法
2012-06-11 14:09 1937import java.security.Key; i ... -
Android 自定义Toast显示图片
2012-06-11 14:08 3065Toast用于向用户显示一些帮助/提示。下面展示了5种效 ... -
Android TabActivity中onKeyDown无效问题
2012-06-11 14:04 35621.当继承TabActivity时,同学们是不是onKeyDo ... -
Android程序安装和卸载
2012-06-11 14:01 1119安装: String str = "/Can ... -
Android 完全退出
2012-06-11 14:00 2592//通过context获取系统服务,得到Activity ... -
Android:创建网格状的RadioGroup
2012-06-05 10:37 3462Android系统自带的Radio ... -
Android: NDK编程
2012-06-05 10:32 5813为何要用到NDK? 概括来说主要分为以下几种情况: ... -
Android 3D图片切换
2012-06-05 10:25 2580MainActivity package org.wp ... -
android反编译和防止反编译的方法
2012-06-05 10:23 1629android基于java的,而ja ... -
android开发之MediaPlayer+Service MP3播放器
2012-06-02 14:57 4064import java.io.File; impo ...
相关推荐
以上就是关于"xfire webservice 上传下载源码"的相关知识点,希望对你理解和实践XFire在文件上传下载中的应用有所帮助。通过深入研究这个Demo,你可以进一步掌握如何利用XFire构建高效、安全的Web服务。
通过分析这个项目源码,开发者可以学习到如何集成XFire框架,如何构建网络请求,如何处理上传下载的异步任务,以及如何在Android中与服务器进行数据交互。同时,这也是一个了解Android网络编程和文件操作的好机会。...
通过分析和学习这个源码,开发者不仅可以了解如何使用XFire进行网络通信,还能掌握Android中图片上传下载的最佳实践。对于初学者来说,这是一个很好的学习资源,而对于有经验的开发者,它也可能提供了一些优化和解决...
本项目以“Android在Android远程上传以及下载图片---XFire框架”为主题,提供了一个Android应用源码的开发Demo,适用于毕业设计学习和论文参考。通过这个项目,我们可以深入理解Android应用中图片的网络传输处理,...
XFire Webservice是一个基于Java的开源工具,它简化了创建、部署和消费Web服务的过程。在深入探讨这个完整实例之前,我们首先需要了解Web服务的基本概念。Web服务是一种通过网络进行通信的应用程序接口(API)。它们...
本项目源码以"Android 在Android远程上传以及下载图片---XFire框架.zip"为标题,旨在教授如何利用XFire框架来实现这一功能。XFire是一款轻量级的Java库,专门用于构建RESTful Web服务,它简化了HTTP通信,使Android...
在Android平台上进行远程图片的上传和下载是移动应用开发中常见的需求,特别是在社交、电商或者媒体分享类应用中。XFire框架是一个专为Android设计的轻量级网络库,可以帮助开发者轻松实现这些功能。本教程将详细...
总的来说,这个资源包中的内容将帮助开发者理解和实践如何在Android应用中利用XFire框架处理图片的远程上传和下载,提高开发效率,同时确保网络操作的稳定性和用户体验。通过学习和应用这些源码,开发者可以深入理解...
本教程将深入探讨如何使用XFire开发Web服务,并在Android应用中通过KSOAP2进行调用。 首先,我们需要了解XFire的基础知识。XFire(现已被Apache CXF项目合并)是一个轻量级的Web服务框架,它支持SOAP、RESTful和XML...
在Android平台上进行远程图片的上传和下载是移动应用开发中常见的需求,特别是在社交、电商或者媒体分享类的应用中。XFire框架是一个专为Android设计的轻量级网络库,它简化了HTTP请求处理,包括文件的上传和下载,...
spring集成xfire webservice实现远程调用 将项目发布后,点击http://localhost:8080/SpringWebServiceTest/services/HelloWS?wsdl即可 其中也有客户端的调用,自己试试吧。
在本文中,我们将学习如何使用 XFire 框架在 Java 中调用 webService 接口。XFIRE 是一个基于 Java 的开源框架,用于简化 Web 服务的开发和集成。下面,我们将通过一个简单的例子,展示如何使用 XFire 调用 ...
通过查看压缩包内的文档“在Android远程上传以及下载图片---XFire框架.doc”和“在Android远程上传以及下载图片---XFire框架 (2).doc”,开发者可以找到详细的使用教程、示例代码和最佳实践。这些文档通常会介绍如何...
总之,XFire框架结合KSOAP可以实现Android应用中图片的远程上传和下载功能,但在现代Android开发中,开发者通常会选择更现代、更灵活的网络库来代替这种组合。了解这些技术的历史和工作原理对于理解Android网络编程...
Android应用源码之在远程上传以及下载图片---XFire框架.zip项目安卓应用源码下载Android应用源码之在远程上传以及下载图片---XFire框架.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考...
### 如何在Android框架中实现图片的远程上传与下载 #### 标题解析 标题“怎样远程上传以及下载图片(android框架)”清晰地指出了本文档的主要内容:通过Android框架进行图片的远程上传和下载操作。这涉及到移动...
通过本例子,你将了解到如何在Java环境中利用XFire来构建Web服务,以及如何在其他Java应用中消费这些服务,这对于提升你的Java Web服务开发技能具有重要意义。 总之,“简单的XFire WebService例子”旨在为初学者...
在Android应用开发中,远程上传和下载图片是常见的功能需求,尤其在社交、电商或资讯类应用中。XFire框架是Android平台上的一个轻量级网络库,它为开发者提供了简单易用的API来实现HTTP请求,包括图片的上传和下载。...
Android 在Android远程上传以及下载图片---XFire框架.zip项目安卓应用源码下载Android 在Android远程上传以及下载图片---XFire框架.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3....
在Spring配置中,我们可以通过以下步骤来配置XFire: 1. 引入XFire的Bean定义:在Spring的XML配置文件中,你需要导入XFire的相关bean,例如`XFireServiceFactoryBean`,它负责创建并管理Web服务实例。 ```xml ...