webservice与android实现通信.doc_第1页
webservice与android实现通信.doc_第2页
webservice与android实现通信.doc_第3页
webservice与android实现通信.doc_第4页
webservice与android实现通信.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

通过webservice与android实现通信(C#与android)我用的系统是win7,开发环境是vs2008 eclipse3.5 ,当然eclipse需要安装android的插件。这里我就不说如何搭建了,大家不懂的可以去http:/www.mars-droidcm/ android-mars论坛找找,有视频前几集就是教你如何搭建环境。假设你们已经拥有vs2008 以及eclipse。首先第一步先让我们搭建webservice服务端。实现了复杂数据的返回,以及解析。但是android不能发送复杂数据给webservice,当然webservice也不能穿复杂数据的参数。 这也是webservice规定的,算是不足之处吧。1、启动vs,新建一个ASP.NET Web服务应用程序。下面的默认名称就是webservice1。我们新建一个程序名字就叫webservice2android。webservices代码如下:using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Linq;using System.Web;using System.Web.Services;using System.Web.Services.Protocols;using System.Xml.Linq;using webservice2android;/必须应用自己的namespacenamespace webservice2android public class Admin private int id; public int Id get return id; set id = value; private string username; public string Username get return username; set username = value; private string password; public string Password get return password; set password = value; / / Service1 的摘要说明 / WebService(Namespace = /) WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1) ToolboxItem(false) / 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 / System.Web.Script.Services.ScriptService public class Service1 : System.Web.Services.WebService WebMethod public string HelloWorld() return Hello World; WebMethod System.Xml.Serialization.XmlInclude(typeof(Admin)/添加Admin 到XmlInclude public ArrayList getData() ArrayList list = new ArrayList(); for (int i = 0; i 10; i+) Admin admin = new Admin(); admin.Id = i; admin.Username = admin + i; admin.Password = admin + i; list.Add(admin); return list; 2、由于android访问webservice时,需要用到ip服务信息,以及域名,但是当vs启动webservice时,他的ip以及端口号都是随机的,这样android就不能访问该服务。所以我们在这里需要绑定我们的ip以及端口号。A、首先我们打开win7的控制面板。B、打开程序与功能。C、打开 打开或关闭windows功能。D、找到Internet信息服务,展开文件夹。再找到Web管理工具,展开你会发现4个关于iis的文件夹。你将这四个文件夹都选中对号.。E、单击确定。这里需要等待一些时间。F、打开控制面板,找到管理工具。G、然后打开 Internet 信息服务(IIS)管理器H、展开 计算机名-pc(),选择网站,右击添加网站I、输入网站名称,我这里写的是testJ、到计算机中创建一个目录,该目录用来放你发布的webservice用的。我建在了D盘的根目录下。K、将建好的路径放到物理路径中。点击确定就行了。L、浏览 Default Web Site网站,将iisstart.htm文件复制,然后到test网站下浏览,再将他粘贴上去。最好修改一下,这样可以和我们默认的做一区别,防止混淆。M、将Default Web Site网站 停止,然后打开test网站。N、关闭为windows防火墙,或者允许该程序通过。O、这是你在同网下的电脑里输入你的ip,将会看到你的iisstart.htm页面,这就说明你成了。这是我的页面。3、 我们将建好的webservice发布在网上。A、右击项目选择发布目标位置:就是我们iis服务的网站文件夹。然后点击发布。B、然后F5 启动vs ,此时浏览器将自动打开。C、将地址栏里的localhost:xxx改为你的计算机ip(不用加端口)。例如我的:08/Service1.asmx然后,回车。页面就会不改变的。只要连接到你的计算机的电脑在浏览器中输入该地址,会和你看到的一样的。D、记下上面的地址。(当然你的就是你自己的ip信息了)我们在android端要用到的。还有我们的域名:就是默认的 / 。还需要记住方法名 HelloWord,和getData。以及参数的类型和参数名。3、 创建android项目,我建的项目名称叫做:AndroidWsTest2.2注意项目需要两个jar包。在网上能下载到。新建一个包,比如webservices.util 常见类叫做:WebserviceUtiler代码如下:package webservice.util;import java.io.IOException;import java.util.HashMap;import org.ksoap2.SoapEnvelope;import org.ksoap2.serialization.SoapObject;import org.ksoap2.serialization.SoapSerializationEnvelope;import org.ksoap2.transport.AndroidHttpTransport;import org.ksoap2.transport.HttpTransportSE;import org.xmlpull.v1.XmlPullParserException;/* * * author ytzn *WebServices android客户端 */public class WebserviceUtiler private String nameSpace ; /域名private String methodName ;/方法名private String url ;/服务器发布的ip信息private String soapAction ;/应用程序字符串private String methodNames ;/参数名private Object methodValues ;/参数值private int methodLenth = 0; /参数个数private HashMap maps;/装在参数的map /* * * param nameSpace 域名http:/ytzn.test/ * param methodName 方法名Add * param url 服务器发布的ip信息08/Service1.asmx * param methodNames 参数变量String methodNames = new Stringx,y,z; * param methodValues 参数值Object methodValues = new Object9,14,8; */ public WebserviceUtiler(String nameSpace, String methodName, String url, String methodNames, Object methodValues) super();Space = nameSpace;this.methodName = methodName;this.url = url;this.methodNames = methodNames;this.methodValues = methodValues;this.soapAction = Space + this.methodName;this.maps = new HashMap();/* * 加载参数 * return boolean */private boolean isMethodMapsOk()int lenthN = methodNames.length;int lenthV = methodValues.length;if(lenthN!=lenthV)return false;elsefor (int i = 0; i lenthV; i+) maps.put(methodNamesi, methodValuesi);this.methodLenth = methodValues.length;return true;/* * 取得webservices方法的返回值 * return SoapSerializationEnvelope类型的返回值 * throws IOException io流异常 * throws XmlPullParserException XmlPullParser异常 */public SoapSerializationEnvelope getWebServicesReturner() throws IOException, XmlPullParserException/step1 指定WebService的命名空间和调用的方法名SoapObject request = new SoapObject(nameSpace, methodName);/用到的域名和方法名/step2 设置调用方法的参数值,这里的参数要与webservices的完全一致 if(this.isMethodMapsOk()for (int i = 0; i this.methodLenth; i+) request.addProperty(methodNamesi,maps.get(methodNamesi);/step3 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);/设置是否调用的是dotNet下的WebServiceenvelope.dotNet = true;/必须,等价于envelope.bodyOut = request; envelope.setOutputSoapObject(request);/设置请求/step4 创建HttpTransportSE对象HttpTransportSE ht = new HttpTransportSE(url); /服务器发布的ip信息/step5 调用WebServiceht.call(soapAction, envelope);/step6 使用getResponse方法获得WebService方法的返回结果if(envelope.getResponse()!=null)/取值 return envelope;return null;elsereturn null;编写Activity类package start.activity;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.ksoap2.SoapFault;import org.ksoap2.serialization.SoapObject;import org.ksoap2.serialization.SoapSerializationEnvelope;import org.xmlpull.v1.XmlPullParserException;public class Test public static void main(String args) String nameSpace =http:/ytzn.test/; /域名 String methodName = HelloWorld;/方法名 String url = 08/Service1.asmx;/服务器发布的ip信息 String methodNames = new Stringid;/参数名 Object methodValues = new Object888;/参数值 List list = null; WebGetter wg = new WebGetter(nameSpace, methodName, url, methodNames, methodValues); SoapSerializationEnvelope envelope=null; try envelope= wg.getWebServicesReturner(); catch (IOException e) e.printStackTrace(); catch (XmlPullParserException e) e.printStackTrace(); try if (envelope.getResponse()!= null) SoapObject result=(SoapObject) envelope.bodyIn; SoapObject detail=(SoapObject) result.getProperty(methodName+Result); list= new ArrayList(); for (int i = 0; i +admin.getId();System.out.println(Admin username-+admin.getUsername();System.out.println(Admin password-+admin.getPassword();System.out.println(-);布局文件: 将AndroidManifest.xml 添加网络访问权限添加: 现在我们运行我们的android程序。在LogCat里得到以结果:02-06 09:30:58.547: I/System.out(315): 02-06 09:30:58.547: I/System.out(315): Admin id-002-06 09:30:58.557: I/System.out(315): Admin username-admin002-06 09:30:58.567: I/System.out(315): Admin password-admin002-06 09:30:58.567: I/System.out(315): -02-06 09:30:58.567: I/System.out(315): 02-06 09:30:58.567: I/System.out(315): Admin id-102-06 09:30:58.567: I/System.out(315): Admin username-admin102-06 09:30:58.567: I/System.out(315): Admin password-admin102-06 09:30:58.567: I/System.out(315): -02-06 09:30:58.567: I/System.out(315): 02-06 09:30:58.580: I/System.out(315): Admin id-202-06 09:30:58.580: I/System.out(315): Admin username-admin202-06 09:30:58.587: I/System.out(315): Admin password-admin202-06 09:30:58.587: I/System.out(315): -02-06 09:30:58.587: I/System.out(315): 02-06 09:30:58.587: I/System.out(315): Admin id-302-06 09:30:58.587: I/System.out(315): Admin username-admin302-06 09:30:58.587: I/System.out(315): Admin password-admin302-06 09:30:58.587: I/System.out(315): -02-06 09:30:58.587: I/System.out(315): 02-06 09:30:58.587: I/System.out(315): Admin id-402-06 09:30:58.587: I/System.out(315): Admin username-admin402-06 09:30:58.587: I/System.out(315): Admin password-admin402-06 09:30:58.607: I/System.out(315): -02-06 09:30:58.607: I/System.out(315): 02-06 09:30:58.607: I/System.out(315): Admin id-502-06 09:30:58.607: I/System.out(315): Admin username-admin502-06 09:30:58.607: I/System.out(315): Admin password-admin502-06 09:30:58.607: I/System.out(315): -02-06 09:30:58.607: I/System.out(315): 02-06 09:30:58.607: I/System.out(315): Admin id-602-06 09:3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论