1、关于BSLC的工作总结android+webservice写在前面:这篇是我暑假以及开学之后的一段时间里,在开发BSLC(同城物物交换系统)的工作总结。因为我也是个android的初学者,所以遇到的很多问题估计也是android初学者可能会遇到的问题。当然,如果你是个android高手,那么此文估计对你的帮助不大。另外,有很多朋友和老师问我,你做的这个东西亮点在哪里呢?凭什么得奖呢?我想说,谁不想做出有新意的东东呢?可是对于从零开始的我们,仅仅靠着模仿前人的东西,就已经是要了老命了。哈哈。好吧,说这话确实有点不上进。给准备或者刚开始学习android的朋友的一点小建议:有可能的话,跟这有实际开
2、发经验(这个经验不只是指android开发的能力经验,还有正规开发软件的规范和过程的经验)的前辈,会让你更快更好更轻松的前进!(当然这里的轻松也是相对而言的轻松,学习之事,即使有兴趣做动力,也多半是痛苦之事,所以,强大的心理是必要的,要学会苦中作乐,认真负责,团队合作,不耻下问)好了,话不多说,下面是我整理出来的技术总结:有对内容的疑问或者质疑,欢迎大家与我交流。企鹅号:947840486Android与webservice开发技术总结(eclipse & visual studio 2008)虽然开始得有点晚,但总也好过一直不开始。从今天起,开始整理自己在androidwebservice开
3、发过程中遇到的各种问题,以及解决的过程。真心觉得有必要做个每日总结,为了纪念也好,为了以后用到的时候方便查看也好(估计希望不大),总之,专业的程序员都会写技术总结。这几天一直在整图片上传下载的问题。从最初的不知所措,到现在的略有了解,个人理解的原理是,通过把图片转换成base64编码,存放在字节流中,通过对字节流的读取、存放,来实现最终对图片的操作。难点是,如何在android下和C#的webservice中分别实现,以及数据的交互。最初找了很多资料来看,开始选择的是ksoap2 + base64 遇到的细节问题:图片路径:/sdcard/#.png android app 只能读取模拟器上的
4、文件(图片),而且不能在系统文件里读取图片(root权限问题),所以,最后还是把测试的图片放到了/sdcard下。最初想先用.net 发布web服务的调试功能,手动传图片。可是后来在学长的提醒下,明白其实不是直接传路径,(而且转换后的字节流),所以,基本上没法手动调试。Ksoap2 不支持传递byte类型的参数,后来试着传base64编码后的string类型,在web服务端再解码,但是不知道哪里出错,还是产生异常。唉,难道要换别的方法?已解决,问题还是出在了服务端。是文件最后的存储路径不对,不能写绝对路径(估计是我的格式不对),改成(/XXX/)相对路径就OK了!只是这是一个简单的demo,只
5、能上传单个的固定的文件。不过,可以比较容易改进,难点是最终我们的项目要求是一次返回多组图片数据,有待完善。8月17日图片上传整合到BSLC中:进展比较缓慢。第一个对调用系统相册的解决过程。查了很多资料,最后还是找到一个比较详细的,通过Intent.createChooser,可以选择调用多个Activity。难点是,需要在这多个被调用的Activity在AndroidManifest注册的时候加上intent -filter ,貌似这里是用来区分那些是属于Intent.ACTION_GET_CONTENT 类型里的。这样的话,也就不再是调用系统默认的INTENT了吧。 = 0) baos.wr
6、ite(buffer, 0, count); String uploadBuffer = new String(Base64.encode(baos.toByteArray(); Log.i(uploadbuffer, uploadbuffer: + uploadBuffer); / byte image =baos.toByteArray(); boolean flag = connectWebService(uploadBuffer, fileName); if (flag) return true; else return false; catch (Exception e) e.pri
7、ntStackTrace(); return false; public static String getFilePathFromUri(Context context, Uri uri, String projection, String selection, String selectionArgs, String sortOrder) Cursor cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder); int index = cursor.ge
8、tColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); String path = cursor.getString(index); cursor.close(); cursor = null; return path; private boolean connectWebService(String image,String fileName) throws IOException, XmlPullParserException String Url = http:/211.87.147.81:8082
9、/Service.asmx; String namespace = http:/tempuri.org/; String methodname = UploadImage; String SOAP_ACTION = http:/211.87.147.81:8082/Service.asmx?op=UploadImage; SoapObject rpc = new SoapObject(namespace, methodname); rpc.addProperty(id, Session.id); rpc.addProperty(image, image); rpc.addProperty(fi
10、leName, fileName); Log.i(send: , image + + fileName); HttpTransportSE ht = new HttpTransportSE(Url); ht.debug = false; SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut = rpc; System.out.println(post: + rpc); envelope.dotNet = true; envelope.set
11、OutputSoapObject(rpc); ht.call(SOAP_ACTION, envelope); Object result = (Object) envelope.getResponse(); System.out.println(result: + result); if (result.toString().equals(true) return true; else return false; /这是出现从本地选择图片的Activitypackage com.photos;import java.io.FileNotFoundException;import com.set
12、ting01.Add01;import com.flogin.Session;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import .Uri;import android.os.Bundle;import android.util.Log;import android.view.View;public class doSelectImageFromLoacal extends Act
13、ivity /*用来标识请求照相功能的activity*/ private static final int CAMERA_WITH_DATA = 1001; /*用来标识请求gallery的activity*/ private static final int PHOTO_PICKED_WITH_DATA = 1002; private Bitmap bitMap; /用来保存图片 private boolean hasImage; /是否已经选择了图片 public static Uri selectedImageUri=null; public void onCreate(Bundle
14、savedInstanceState) super.onCreate(savedInstanceState); Intent localIntent = new Intent(); localIntent.setType(image/*); localIntent.setAction(android.intent.action.GET_CONTENT); startActivityForResult(localIntent, PHOTO_PICKED_WITH_DATA); protected void onActivityResult(int requestCode, int resultC
15、ode, Intent data) Log.i(doSelectImageFromLoacal:,doSelectImageFromLoacal:start!); if (resultCode != RESULT_OK) return; switch (requestCode) case PHOTO_PICKED_WITH_DATA: /从本地选择图片 if (bitMap != null & !bitMap.isRecycled() bitMap.recycle(); selectedImageUri = data.getData(); Session.doSelectImageContex
16、t=this; Session.imageUri=selectedImageUri;/把对应图片的在数据库中的Uri读取给Session Log.i(log.i,selectedImageUri: +selectedImageUri.toString(); if(selectedImageUri != null) try bitMap = BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImageUri); catch (FileNotFoundException e) e.printStackTr
17、ace(); /下面这两句是对图片按照一定的比例缩放,这样就可以完美地显示出来。有关图片的处理将重新写文章来介绍。 /int scale = ImageThumbnail.reckonThumbnail(bitMap.getWidth(), bitMap.getHeight(), 500, 600); /bitMap = ImageThumbnail.PicZoom(bitMap, (int) (bitMap.getWidth() / scale), (int) (bitMap.getHeight() / scale); Add01.imageView.setImageBitmap(bitMap); Add01.imageView.setVisibility(View.VISIBLE); doSelectImageFromLoacal.this.finish();/结束当前Activity hasImage = true; break; case CAMERA_WITH_DATA: /拍照 Bundle bundle = data.getExtras(); bitMap
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1