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

SunShineGO 贡献于2014-01-16

作者 微软用户  创建于2012-07-05 05:28:00   修改者微软用户  修改于2012-07-05 05:28:00字数9447

文档摘要:有时我们可以看到,图片往往被提交到服务器端,这里我通过XFire框架来实现远程上传以及下载图片的功能。首先我们来看看从服务器端下载图片的功能:这里用的是KSOAP框架,就不多说了,贴上代码。
关键词:

有时我们可以看到,图片往往被提交到服务器端,这里我通过XFire框架来实现远程上传以及下载图片的功能。 首先我们来看看从服务器端下载图片的功能: 这里用的是KSOAP框架,就不多说了,贴上代码。 首先我们看看Acitivity中的代码: 1. ackage com.net.connect.app;   2. import java.io.File;   3. import java.io.FileInputStream;   4. import android.app.Activity;   5. import android.graphics.Bitmap;   6. import android.graphics.BitmapFactory;   7. import android.os.Bundle;   8. import android.view.View;   9. import android.view.View.OnClickListener;   10. import android.widget.Button;   11. import android.widget.ImageView;   12. import android.widget.Toast;   13. import com.base.encry.decry.app.Base64;   14. import com.base.file.util.FileOperate;   15. import com.cn.blogs.ksoap.app.MyWebServiceHelper;   16. public class UpAndDownPicFileActivity extends Activity {   17. ImageView imageView;   18. public static final String filename = "xfire.png";   19. public static final String fileDir = "/sdcard/xmlfile/";   20. public MyWebServiceHelper myWebServiceHelper = new MyWebServiceHelper();   21. @Override   22. protected void onCreate(Bundle savedInstanceState) {   23. // TODO Auto-generated method stub   24. super.onCreate(savedInstanceState);   25. setContentView(R.layout.upanddownpic);   26. imageView = (ImageView) this.findViewById(R.id.imageView1);   27. // Bitmap   28. // bitmap=BitmapFactory.decodeFile("/sdcard/xmlfile/"+"xfire.png");   29. // imageView.setImageBitmap(bitmap);   30. Button downButton = (Button) findViewById(R.id.downbutton);   31. downButton.setOnClickListener(new OnClickListener() {   32. @Override   33. public void onClick(View v) {   34. // TODO Auto-generated method stub   35. myWebServiceHelper.getTranferFileString(filename);   36. // 收到服务器端发送过来的图片,然后显现在图片框中   37. Bitmap bitmap = BitmapFactory.decodeFile(fileDir + filename);   38. imageView.setImageBitmap(bitmap);   39. }   复制代码 分别实现了远程上传和下载图片的功能。它的处理类集中在MyWebServiceHelper,它实现了远程获取和上传的细节功能。 这个功能都是通过KSOAP框架实现的。下面贴上它的代码,如下所示: 1. // WSDL文档中的命名空间  2. private static final String targetNameSpace = "http://android.googlepages.com/";  3. // WSDL文档中的URL  4. private static final String WSDL = "http://10.10.178.71:8888/WSDLApp/services/MyService";  5. // 需要调用的方法名(获得Myervices中的helloWorld方法)  6. private static final String getHelloworld = "helloWorld";  7. //需要调用的方法名(获得Myervices中的login方法)  8. private static final String getLogin="login";  9. //获取加密图片的字符串  10. private static final String getTranferFileStringWithEncode="tranferFileStringWithEncode";  11. //获取加密图片的字符串  12. private static final String upToServerOfFileContent="fetchFileStringWithEncode";  13. public String getTranferFileString(String filename) {  14. String fileContent = "";  15. SoapObject soapObject = new SoapObject(targetNameSpace,getTranferFileStringWithEncode);  16. 17. SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);  18. envelope.dotNet = false;  19. envelope.setOutputSoapObject(soapObject);  20. HttpTransportSE httpTranstation=new HttpTransportSE(WSDL);  21. 22. try {  23. httpTranstation.call(targetNameSpace + getTranferFileStringWithEncode, envelope);  24. SoapObject result = (SoapObject ) envelope.bodyIn;//getResponse();  25. 26. fileContent=(String) result.getProperty(0).toString();  27. //String strFile="downfromserive"+Math.random()+".png";  28. FileOperate.OpenOrCreateFile(filename);  29. FileOperate.xmlString2Bin(fileContent, new File(filename));  30. 31. // 也可以通过下面方式获得str  32. // SoapPrimitive result = (SoapPrimitive ) envelope.getResponse();  33. // str=result.toString();  34. // 直指value字符串值  35. } catch (IOException e) {  36. // TODO Auto-generated catch block  37. e.printStackTrace();  38. } catch (XmlPullParserException e) {  39. // TODO Auto-generated catch block  40. e.printStackTrace();  41. }  42. return fileContent;  43. }  44. 45. 46. public String upToServerOfFileStringWithEncode(String filename,String fileContent) {  47. String str = "";  48. SoapObject soapObject = new SoapObject(targetNameSpace,upToServerOfFileContent);  49. 50. soapObject.addProperty("filename", filename);  51. soapObject.addProperty("fileContent", fileContent);  52. 53. SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);  54. envelope.dotNet = false;  55. envelope.setOutputSoapObject(soapObject);  56. HttpTransportSE httpTranstation=new HttpTransportSE(WSDL);  57. 58. try {  59. httpTranstation.call(targetNameSpace + upToServerOfFileContent, envelope);  60. SoapObject result = (SoapObject ) envelope.bodyIn;//getResponse();  61. 62. str=(String) result.getProperty(0).toString();  63. //返回上传成功0,1标志位  64. 65. } catch (IOException e) {  66. // TODO Auto-generated catch block  67. e.printStackTrace();  68. return e.getMessage();  69. } catch (XmlPullParserException e) {  70. // TODO Auto-generated catch block  71. e.printStackTrace();  72. return e.getMessage();  73. }  74. return str;  75. } 复制代码 在第二个函数中有: 1. SoapObject soapObject = new SoapObject(targetNameSpace,upToServerOfFileContent);   2. soapObject.addProperty("filename", filename);   3. soapObject.addProperty("fileContent", fileContent);   复制代码 这个是android客户端传送服务器端的参数参数。而里面有个FileOperate.java类,这个类负责对文件操作。我封装在这个类中,方便集中处理以及调用。下面贴上代码。如下所示: 1. package com.base.file.util;   2. import java.io.File;   3. import java.io.FileInputStream;   4. import java.io.FileOutputStream;   5. import java.io.IOException;   6. import com.base.encry.decry.app.Base64;   7. public class FileOperate {   8.        9. //在SD卡中创建文件   10. public static void OpenOrCreateFile(String filename){   11. // 获取扩展SD卡设备状态   12. String sDStateString = android.os.Environment   13. .getExternalStorageState();   14. if (sDStateString.equals(android.os.Environment.MEDIA_MOUNTED)) {   15. // String strFile="downfromserive"+Math.random()+".png";   16. // 获取扩展存储设备的文件目录   17. File SDFile = android.os.Environment   18. .getExternalStorageDirectory();   19. File destDir = new File("/sdcard/xmlfile");   20. // File destDir = new File(SDFile.getAbsolutePath() +   21. // destDirStr);   22. if (!destDir.exists())   23. destDir.mkdir();   24. // Toast.makeText(SDCardTest., text, duration)   25. // 打开文件   26. File myFile = new File(destDir + File.separator + filename);   27.                28. // 判断是否存在,不存在则创建   29. if (!myFile.exists()) {   30. try {   31. myFile.createNewFile();   32. } catch (IOException e) {   33. // TODO Auto-generated catch block   34. e.printStackTrace();   35. }   36. }   37. }   38. }   39.        40. //删除指定文件,比如临时文件   41. public static void removeFile(String filename){   42. if(new File(filename).exists())   43. new File(filename).delete();   44. }   45.        46. //解密,并将内容写入至指定文件中   47. public static boolean xmlString2Bin(String base64String, File file) {   48. byte[] data;   49. FileOutputStream output = null;   50. boolean ret = false;   51. try {   52. data = Base64.decode(base64String);   53. output = new FileOutputStream(file);   54. output.write(data);   55. output.close();   56. ret = true;   57. } catch (Exception e) {   58. e.printStackTrace();   59. }   60. return ret;   61. }   62.        63. //将文件内容加密   64. public static String bin2XmlString(String filename) {   65. byte[] data = null;   66. FileInputStream input = null;   67. String ret = null;   68. int n;   69. try {   70. data = new byte[(int) new File(filename).length()];   71. input = new FileInputStream(new File(filename));   72.                73. n = input.read(data);//这个就是一个文件读取过程。没有写while,一次性读完   74. input.close();   75. ret = new String(Base64.encode(data));   76. } catch (Exception e) {   77. e.printStackTrace();   78. }   79. return ret;   80. }   81. }   复制代码 当然,我们还在看看这个Activity.java中的布局文件。 1.    2.    5.    7.

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档