`
thunder_yan
  • 浏览: 112739 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

在Android中通过XFire WebService远程上传以及下载图片

阅读更多

有时我们可以看到,图片往往被提交到服务器端,这里我通过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类怎么写?

相关推荐

    xfire webservice 上传下载源码

    以上就是关于"xfire webservice 上传下载源码"的相关知识点,希望对你理解和实践XFire在文件上传下载中的应用有所帮助。通过深入研究这个Demo,你可以进一步掌握如何利用XFire构建高效、安全的Web服务。

    Android应用源码之在远程上传以及下载图片---XFire框架.zip

    通过分析这个项目源码,开发者可以学习到如何集成XFire框架,如何构建网络请求,如何处理上传下载的异步任务,以及如何在Android中与服务器进行数据交互。同时,这也是一个了解Android网络编程和文件操作的好机会。...

    安卓Android源码——在Android远程上传以及下载图片---XFire框架.zip

    通过分析和学习这个源码,开发者不仅可以了解如何使用XFire进行网络通信,还能掌握Android中图片上传下载的最佳实践。对于初学者来说,这是一个很好的学习资源,而对于有经验的开发者,它也可能提供了一些优化和解决...

    Android 在Android远程上传以及下载图片---XFire框架-IT计算机-毕业设计.zip

    本项目以“Android在Android远程上传以及下载图片---XFire框架”为主题,提供了一个Android应用源码的开发Demo,适用于毕业设计学习和论文参考。通过这个项目,我们可以深入理解Android应用中图片的网络传输处理,...

    xfire webservice 完整实例下载

    XFire Webservice是一个基于Java的开源工具,它简化了创建、部署和消费Web服务的过程。在深入探讨这个完整实例之前,我们首先需要了解Web服务的基本概念。Web服务是一种通过网络进行通信的应用程序接口(API)。它们...

    Android 在Android远程上传以及下载图片---XFire框架.zip

    本项目源码以"Android 在Android远程上传以及下载图片---XFire框架.zip"为标题,旨在教授如何利用XFire框架来实现这一功能。XFire是一款轻量级的Java库,专门用于构建RESTful Web服务,它简化了HTTP通信,使Android...

    Android在Android远程上传以及下载图片---XFire框架.zip

    在Android平台上进行远程图片的上传和下载是移动应用开发中常见的需求,特别是在社交、电商或者媒体分享类应用中。XFire框架是一个专为Android设计的轻量级网络库,可以帮助开发者轻松实现这些功能。本教程将详细...

    安卓Android源码——在远程上传以及下载图片---XFire框架.zip

    总的来说,这个资源包中的内容将帮助开发者理解和实践如何在Android应用中利用XFire框架处理图片的远程上传和下载,提高开发效率,同时确保网络操作的稳定性和用户体验。通过学习和应用这些源码,开发者可以深入理解...

    xfire开发webservice以及Android利用ksoap2访问webservice

    本教程将深入探讨如何使用XFire开发Web服务,并在Android应用中通过KSOAP2进行调用。 首先,我们需要了解XFire的基础知识。XFire(现已被Apache CXF项目合并)是一个轻量级的Web服务框架,它支持SOAP、RESTful和XML...

    Android 在Android远程上传以及下载图片-XFire框架.rar

    在Android平台上进行远程图片的上传和下载是移动应用开发中常见的需求,特别是在社交、电商或者媒体分享类的应用中。XFire框架是一个专为Android设计的轻量级网络库,它简化了HTTP请求处理,包括文件的上传和下载,...

    spring集成xfire webservice实现

    spring集成xfire webservice实现远程调用 将项目发布后,点击http://localhost:8080/SpringWebServiceTest/services/HelloWS?wsdl即可 其中也有客户端的调用,自己试试吧。

    java使用XFire调用webService接口

    在本文中,我们将学习如何使用 XFire 框架在 Java 中调用 webService 接口。XFIRE 是一个基于 Java 的开源框架,用于简化 Web 服务的开发和集成。下面,我们将通过一个简单的例子,展示如何使用 XFire 调用 ...

    在Android远程上传以及下载图片---XFire框架.zip

    通过查看压缩包内的文档“在Android远程上传以及下载图片---XFire框架.doc”和“在Android远程上传以及下载图片---XFire框架 (2).doc”,开发者可以找到详细的使用教程、示例代码和最佳实践。这些文档通常会介绍如何...

    在Android远程上传以及下载图片---XFire框架

    总之,XFire框架结合KSOAP可以实现Android应用中图片的远程上传和下载功能,但在现代Android开发中,开发者通常会选择更现代、更灵活的网络库来代替这种组合。了解这些技术的历史和工作原理对于理解Android网络编程...

    Android应用源码之在远程上传以及下载图片---XFire框架.zip项目安卓应用源码下载

    Android应用源码之在远程上传以及下载图片---XFire框架.zip项目安卓应用源码下载Android应用源码之在远程上传以及下载图片---XFire框架.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考...

    怎样远程上传以及下载图片(android框架)

    ### 如何在Android框架中实现图片的远程上传与下载 #### 标题解析 标题“怎样远程上传以及下载图片(android框架)”清晰地指出了本文档的主要内容:通过Android框架进行图片的远程上传和下载操作。这涉及到移动...

    简单的XFire WebService例子

    通过本例子,你将了解到如何在Java环境中利用XFire来构建Web服务,以及如何在其他Java应用中消费这些服务,这对于提升你的Java Web服务开发技能具有重要意义。 总之,“简单的XFire WebService例子”旨在为初学者...

    Android程序研发源码在Android远程上传以及下载图片---XFire框架.zip

    在Android应用开发中,远程上传和下载图片是常见的功能需求,尤其在社交、电商或资讯类应用中。XFire框架是Android平台上的一个轻量级网络库,它为开发者提供了简单易用的API来实现HTTP请求,包括图片的上传和下载。...

    Android 在Android远程上传以及下载图片---XFire框架.zip项目安卓应用源码下载

    Android 在Android远程上传以及下载图片---XFire框架.zip项目安卓应用源码下载Android 在Android远程上传以及下载图片---XFire框架.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3....

    Spring XFire 实现webService

    在Spring配置中,我们可以通过以下步骤来配置XFire: 1. 引入XFire的Bean定义:在Spring的XML配置文件中,你需要导入XFire的相关bean,例如`XFireServiceFactoryBean`,它负责创建并管理Web服务实例。 ```xml ...

Global site tag (gtag.js) - Google Analytics