android开发webservice
Ⅰ android studio 怎么搭建webservice
.xml:
<Button android:"@+id/button1"......>
.java:
Button btn = (Button) findViewById(R.id.button1);
btn .setOnClickListener(new View.OnClickListener() {
         public void onClick(View v) {
            //你要执行的代码
           }
     });
这是一种方法
Ⅱ android调用webservice怎么授权
具体调用调用webservice的方法为:
(1) 指定webservice的命名空间和调用的方法名,如:
SoapObject request =new SoapObject(http://service,”getName”);
SoapObject类的第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。第二个参数表示要调用的WebService方法名。
(2) 设置调用方法的参数值,如果没有参数,可以省略,设置方法的参数值的代码如下:
Request.addProperty(“param1”,”value”);
Request.addProperty(“param2”,”value”);
要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。
(3) 生成调用Webservice方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述,代码为:
SoapSerializationEnvelope envelope=new 
SoapSerializationEnvelope(SoapEnvelope.VER11);
Envelope.bodyOut = request;
创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。该版本号需要根据服务端WebService的版本号设置。在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性,该属性的值就是在第一步创建的SoapObject对象。
(4) 创建HttpTransportsSE对象。通过HttpTransportsSE类的构造方法可以指定WebService的WSDL文档的URL:
HttpTransportSE ht=new HttpTransportSE(“http://192.168.18.17:80
/axis2/service/SearchNewsService?wsdl”);
(5)使用call方法调用WebService方法,代码:
ht.call(null,envelope);
Call方法的第一个参数一般为null,第2个参数就是在第3步创建的SoapSerializationEnvelope对象。
(6)使用getResponse方法获得WebService方法的返回结果,代码:
SoapObject soapObject =( SoapObject) envelope.getResponse();
Ⅲ android调用webservice怎么传递对象
1.webservice方法要传递参数的对象中包含了日期类型,guid类型。如下所示:
[html] view plain 
POST /MyWebService.asmx HTTP/1.1  
Host: 192.168.11.62  
Content-Type: text/xml; charset=utf-8  
Content-Length: length  
SOAPAction: "http://tempuri.org/AddMaintenanceInfo"  
  
<?xml version="1.0" encoding="utf-8"?>  
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">  
  <soap:Body>  
    <AddMaintenanceInfo xmlns="http://tempuri.org/">  
      <model>  
        <Id>guid</Id>  
        <CarId>guid</CarId>  
        <Cost>string</Cost>  
        <Dates>dateTime</Dates>  
      </model>  
    </AddMaintenanceInfo>  
  </soap:Body>  
</soap:Envelope>  
2.新建一个类CarMaintenanceInfo用于传递参数对象,并使其实现KvmSerializable,如下
[java] view plain 
public class CarMaintenanceInfo implements KvmSerializable {  
/** 
     * 车辆ID 
     */  
    public String CarId;  
  
    /** 
     * 车辆维修费用 
     */  
    public String Cost;  
  
    public String Dates;  
  
    @Override  
    public Object getProperty(int arg0) {  
        switch (arg0) {  
            case 0:  
                return CarId;  
            case 1:  
                return Cost;  
            case 2:  
                return Dates;  
            default:  
                break;  
        }  
        return null;  
    }  
  
    @Override  
    public int getPropertyCount() {  
        return 3;  
    }  
  
    @Override  
    public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {  
        switch (arg0) {  
            case 0:  
                arg2.type = PropertyInfo.STRING_CLASS;  
                arg2.name = "CarId";  
                break;  
            case 1:  
                arg2.type = PropertyInfo.STRING_CLASS;  
                arg2.name = "Cost";  
                break;  
            case 2:  
                arg2.type = PropertyInfo.STRING_CLASS;  
                arg2.name = "Dates";  
                break;  
            default:  
                break;  
        }  
    }  
  
    @Override  
    public void setProperty(int arg0, Object arg1) {  
        switch (arg0) {  
            case 0:  
                CarId = arg1.toString();  
                break;  
            case 1:  
                Cost = arg1.toString();  
                break;  
            case 2:  
                Dates =  arg1.toString();  
                break;  
            default:  
                break;  
        }  
  
    }  
  
}  
注意:getPropertyCount的值一定要与该类对象的属性数相同,否则在传递到服务器时,服务器收不到部分对象的属性。
3.编写请求方法,如下:
[java] view plain 
public boolean addMaintenanceInfo(Context context) throws IOException, XmlPullParserException {  
  
        String nameSpace = "http://tempuri.org/";  
        String methodName = "AddMaintenanceInfo";  
        String soapAction = "http://tempuri.org/AddMaintenanceInfo";  
  
        String url = "http://192.168.11.62:6900/MyWebService.asmx?wsdl";// 后面加不加那个?wsdl参数影响都不大  
CarMaintenanceInfo info = new CarMaintenanceInfo();  
        info.setProperty(0, "9fee02c9-8785-4b49-b389-58ed6562c66d");  
        info.setProperty(1, "12778787");  
        info.setProperty(2, "2013-07-29T16:45:20");  
// 建立webservice连接对象  
        org.ksoap2.transport.HttpTransportSE transport = new HttpTransportSE(url);  
        transport.debug = true;// 是否是调试模式  
  
        // 设置连接参数  
        SoapObject soapObject = new SoapObject(nameSpace, methodName);  
        PropertyInfo objekt = new PropertyInfo();  
        objekt.setName("model");  
        objekt.setValue(info);  
        objekt.setType(info.getClass());  
        soapObject.addProperty(objekt);  
  
        // 设置返回参数  
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);// soap协议版本必须用SoapEnvelope.VER11(Soap  
                                                                                                // V1.1)  
        envelope.dotNet = true;// 注意:这个属性是对dotnetwebservice协议的支持,如果dotnet的webservice  
                                // 不指定rpc方式则用true否则要用false  
        envelope.bodyOut = transport;  
        envelope.setOutputSoapObject(soapObject);// 设置请求参数  
//      new MarshalDate().register(envelope);    
        envelope.addMapping(nameSpace, "CarMaintenanceInfo", info.getClass());// 传对象时必须,参数namespace是webservice中指定的,  
          
        // claszz是自定义类的类型  
        try {  
            transport.call(soapAction, envelope);  
            // SoapObject sb = (SoapObject)envelope.bodyIn;//服务器返回的对象存在envelope的bodyIn中  
            Object obj = envelope.getResponse();// 直接将返回值强制转换为已知对象  
            Log.d("WebService", "返回结果:" + obj.toString());  
  
        }  
        catch (IOException e) {  
            e.printStackTrace();  
        }  
        catch (XmlPullParserException e) {  
            e.printStackTrace();  
        }  
        catch (Exception ex) {  
            ex.printStackTrace();  
        }  
  
        return true;  
  
        // 解析返回的结果  
        // return Boolean.parseBoolean(new AnalyzeUtil().analyze(response));  
    }  
注意:传递date类型的时候其实可以使用Date而不是String。但是需要修改几个地方
1.CarMaintenanceInfo类中的getPropertyInfo(),将arg2.type = PropertyInfo.STRING_CLASS修改为MarshalDate.DATE_CLASS;
2. 在请求方法中的 envelope.setOutputSoapObject(soapObject);下加上 new MarshalDate().register(envelope);  
虽然可以使用Date,但是传到服务器上的时间与本地时间有时差问题。
当Android 调用webservice,请求参数中有日期,guid,double时,将这些类型在添加对象前转换为字符串即可。
[java] view plain 
// 构造request  
  SoapObject request = new SoapObject(PublishInfo.NAMESPACE, "GetCarListByRegion");  
  request.addProperty("leftTopLat", String.valueOf(leftTopLat));  
  request.addProperty("leftTopLng", String.valueOf(leftTopLng));  
  request.addProperty("rightBottomLat", String.valueOf(rightBottomLat));  
  request.addProperty("rightBottomLng", String.valueOf(rightBottomLng));  
当需要传递一个服务器对象参数时.
[html] view plain 
<?xml version="1.0" encoding="utf-8"?>  
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">  
  <soap:Body>  
    <GetLicenseDetails xmlns="http://tempuri.org/">  
      <companyId>guid</companyId>  
      <licenseNos>  
        <string>string</string>  
        <string>string</string>  
      </licenseNos>  
      <pageOptions>  
        <page>int</page>  
        <rows>int</rows>  
        <total>int</total>  
        <sort>string</sort>  
        <order>string</order>  
        <skip>int</skip>  
        <Remark>string</Remark>  
      </pageOptions>  
    </GetLicenseDetails>  
  </soap:Body>  
</soap:Envelope>  
[java] view plain 
public ListPageResult<LicenseInfo> getLicenseDetails(String[] licenseNos, int page, int rows, int total) {  
 // 构造request  
 SoapObject request = new SoapObject(PublishInfo.NAMESPACE, "GetLicenseDetails");  
 // 许可证列表  
 SoapObject deviceObject = new SoapObject(PublishInfo.NAMESPACE, "GetLicenseDetails");  
 if (licenseNos != null && licenseNos.length > 0) {  
  for (int i = 0; i < licenseNos.length; i++) {  
   if (!"".equals(licenseNos[i])) {  
    deviceObject.addProperty("string", licenseNos[i]);  
   }  
  }  
  request.addProperty("licenseNos", deviceObject);  
 }  
 else {  
  request.addProperty("licenseNos", null);  
 }  
 // 分页数据  
 SoapObject optionObject = new SoapObject(PublishInfo.NAMESPACE, "PageOptions");  
 optionObject.addProperty("page", page);  
 optionObject.addProperty("rows", rows);  
 optionObject.addProperty("total", total);  
 optionObject.addProperty("sort", null);  
 optionObject.addProperty("order", "desc");  
 optionObject.addProperty("skip", 0);  
 optionObject.addProperty("Remark", null);  
 request.addProperty("pageOptions", optionObject);  
 // 获取response  
 Object response = sendRequest(context, request);  
 if (!mNetErrorHanlder.hasError(response)) { return ObjectAnalyze.getLicenseDetails(response); }  
 return null;  
}
Ⅳ 一个最简单的供Android调用webService的rest服务端怎么搭建
Eclipse+Axis2构建WebService实战总结
什么是webservice?
企业提供特定的服务service,其他用户通过internet即web访问这些服务。换句话说,WebService是两个计算机之间通讯(交谈)的技术,网络中一台计算机想要调用另一台计算机的方法时,此时可以需要WebService。很火的SOA、云计算在技术层面上都是WebService
用程序员的观点就是:企业提供实现某功能的函数,其他用过通过在线访问这些函数。
webservice两个重要文件:.aar:服务包文件,提供服务,.wsdl:web服务接口定义语言文件,供客户端使用。
webservice关键技术
1、XML:可扩展的标记语言(XML)是Web service平台中表示数据的基本格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。
2、SOAP:SOAP是web service的标准通信协议,SOAP为simple object access protocoll的缩写,简单对象访问协议.它是一种标准化的传输消息的XML消息格式。即XML文件的消息格式,由这个协议来决定。SOAP简单的理解,就是这样的一个开放协议SOAP=RPC+HTTP+XML:采用HTTP作为底层通讯协议;RPC作为一致性的调用途径,xml作为数据传送的格式。
3、Axis2:Axis2是实现Web Service的一种技术框架,是新一代的SOAP引擎,即通过这个架构很方便地实现webservice.即在服务端通过这个技术支持,很方便地发布webservice服务,使开发只关注具体的商业实现,而由这个框架直接发布,节省了开发者的时间。在客户端同样只关注调用。为了使用这个框架,在3个地方需要部署Axis2的库:web服务器tomcat上、eclipse服务端开发axis2库、eclipse客户端开发ksoap2库。
4、WSDL:WSDL的全称是web service Description Language,是一种基于XML格式的关于web服务的描述语言。其主要目的在于web service的提供者将自己的web服务的所有相关内容,如所提供的服务的传输方式,服务方法接口,接口参数,服务路径等,生成相应的完全文档,发布给使用者。使用者可以通过这个WSDL文档,创建相应的SOAP请求消息,通过HTTP传递给webservice提供者;web服务在完成服务请求后,将SOAP返回消息传回请求者,服务请求者再根据WSDL文档将SOAP返回消息解析成自己能够理解的内容。
5、UDDI:UDDI 是一种目录服务,企业可以使用它对 Web services 进行注册和搜索。UDDI,英文为 "Universal Description, Discovery and Integration",可译为“通用描述、发现与集成服务”。UDDI是一种创建注册表服务的规范,以便大家将自己的web service进行注册发布供使用者查找.然而当服务提供者想将自己的web service向全世界公布,以便外部找到其服务时,那么服务提供者可以将自己的web service注册到相应的UDDI商用注册网站,目前全球有IBM等4家UDDI商用注册网站。因为WSDL文件中已经给定了web service的地址URI,外部可以直接通过WSDL提供的URI进行相应的web service调用。所以UDDI并不是一个必需的web service组件,服务方完全可以不进行UDDI的注册。
webservice服务端的实现
1、tomcat服务器部署:部署Axis2到tomcat:将Axis2.war解压到tomcat的webapps目录下即可,如果有数据库连接,需把数据库连接jar包添加到tomcat的lib目录下,如:oracle的ojdbc14.jar,和mysql的 mysql-connector-java-3.1.11-bin.jar。部署成功后,启动tomcat,可通过http://localhost:8080/axis2/访问,查看是否部署成功。webservice的axis服务存档aar发布文件就发布到tomcat\webapps\axis2\WEB-INF\services这个目录下
2、安装axis2插件到eclipse:解压插件,直接拷贝到eclipse的插件目录plugins,两个插件为:org.apache.axis2.eclipse.codegen.plugin_1.6.0.jar、org.apache.axis2.eclipse.service.plugin_1.6.0.jar。打开Eclipse,选择File/New/Other菜单项,看到如下界面表明安装成功:
安装这两个插件的目的是:方便生成Axis2的服务包(.aar文件)和生成Axis2客户端
3、打包生成axis2服务包:
选择服务程序类文件所在的目录,不包括包,选中Include..,表示在生成的服务包中只包括类文件,不包括其他文件。
选择跳过WSDL文件,WSDL文件会在部署这个服务到Tomcat后,有Axis2自动生成,通过http://localhost:8080/axis2/services/newWs?wsdl可以查看文件内容。
注意:WSDL是web服务定义语言,通过XML的方式对该服务类进行描述,客户端访问服务时要用到这个文件,可以生成这个文件给客户端,也可以上面的在线获取这个文件。
点击“next”,进入添加服务需要的库文件界面:
需要的库文件直接部署到tomcat中,此处不需要添加,进入下一界面:
选择自动生成service.xml文件。点击进入下一界面:
输入服务名和类名,点击load即可找出该服务程序的全部方法。
输入发布路径,和文件名。生成newWs.aar服务包文件。
部署完成后,输入http://localhost:8080/axis2/services/listServices,即可看到已部署的全部服务。
eclipse中webservice不能发布的原因:
1、界面问题,把发布界面最大化或拖拽,是界面刷新,就可以看到输入界面了。
2、发布界面最后一步,load时,没有任何反映,是这个类的代码有问题,例如有加载动态库的代码,动态库找不到,则会没有反映。
3、代码没改变的情况下好像只能生成一次,想在生成的话,需要改代码,或需要重启eclipse
webservie服务端:java调用C++动态库的实现
1、在eclipse中编写一个java类文件,应用中的其他类可以调用这个类中的函数:
[cpp] view plainprint?
01.package util;
02.
03.public class InvokeDll
04.{
05.        //测试函数
06.        public native int testFunc(int a, int b);
07.
08.        //获取最近一次错误代码
09.        public native int lastErr();
10.}
package util;
public class InvokeDll
{
//测试函数
public native int testFunc(int a, int b);
//获取最近一次错误代码
public native int lastErr();
}
注意:函数要用native修饰符
2、用javah命令生成C++可调用的.h文件
a、上述java类编译生成类文件InvokeDll.class
b、set classpath="D:\teatInvokeDll\bin",类文件生成在D:\testInvokeDll\bin\util\InvokeDll.class
c、命令行进入D:\teatInvokeDll\bin
d、javah util.InvokeDll
你会发现当前目录下多了一个util_InvokeDll.h文件,文件内容如下:
[cpp] view plainprint?
01./* DO NOT EDIT THIS FILE - it is machine generated */
02.#include <jni.h>
03./* Header for class util_InvokeDll */
04.
05.#ifndef _Included_util_InvokeDll
06.#define _Included_util_InvokeDll
07.#ifdef __cplusplus
08.extern "C" {
09.#endif
10./*
11. * Class:     util_InvokeDll
12. * Method:    testFunc
13. * Signature: (II)I
14. */
15.JNIEXPORT jint JNICALL Java_util_InvokeDll_testFunc
16.  (JNIEnv *, jobject, jint, jint);
17.
18./*
19. * Class:     util_InvokeDll
20. * Method:    lastErr
21. * Signature: ()I
22. */
23.JNIEXPORT jint JNICALL Java_util_InvokeDll_lastErr
24.  (JNIEnv *, jobject);
25.
26.#ifdef __cplusplus
27.}
28.#endif
29.#endif
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class util_InvokeDll */
#ifndef _Included_util_InvokeDll
#define _Included_util_InvokeDll
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     util_InvokeDll
* Method:    testFunc
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_util_InvokeDll_testFunc
(JNIEnv *, jobject, jint, jint);
/*
* Class:     util_InvokeDll
* Method:    lastErr
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_util_InvokeDll_lastErr
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
3、在VC中生成dll如java2dll.dll
a、新建一个空的dll工程,名叫java2dll。
b、把util_InvokeDll.h头文件复制到工程目录下,并添加到header files文件夹里。
c、在source files文件目录中添加一个java2dll.cpp,文件内容是头文件里的方法的实现:
[cpp] view plainprint?
01.#include <stdio.h>
02.#include "util_InvokeDll.h"
03.
04.JNIEXPORT jint JNICALL Java_util_InvokeDll_testFunc(JNIEnv *, jobject, jint a, jint b)
05.{
06.    int i=0;
07.        /*HMODULE hMole = ::LoadLibrary("test.dll");
08.
09.          PFUN newfun = (PFUN)::GetProcAddress(hMole,"testFn");
10.          i = newfun(a,b);
11.          ::FreeLibrary(hMole);
12.        */
13.    i=a+b;
14.        return i;
15.}
16.
17.JNIEXPORT jint JNICALL Java_util_InvokeDll_lastErr(JNIEnv *, jobject)
18.{
19.        int i=0;
20.        return i;
21.}
#include <stdio.h>
#include "util_InvokeDll.h"
JNIEXPORT jint JNICALL Java_util_InvokeDll_testFunc(JNIEnv *, jobject, jint a, jint b)
{
int i=0;
/*HMODULE hMole = ::LoadLibrary("test.dll");
PFUN newfun = (PFUN)::GetProcAddress(hMole,"testFn");
i = newfun(a,b);
::FreeLibrary(hMole);
*/
i=a+b;
return i;
}
JNIEXPORT jint JNICALL Java_util_InvokeDll_lastErr(JNIEnv *, jobject)
{
int i=0;
return i;
}d、点击“运行”->“编译”,这时你会看到很多数据类型没被声明的错误,那是因为util_InvokeDll.h使用了很多JAVA_HOME/include/jni.h文件自定义的数据类型,而jni.h又引
用了JAVA_HOME/include/win32/jni_md.h,这时你需要把jni.h和jni_md.h引入到工程里面来,左击工程名“工程属性”->“文件/目录”->“包含文件目录”把JAVA_HOME/include和JAVA_HOME/include/win32文件夹添加,确定后,再次编译一切正常,这时在工程的目录下就找到java2dll.dll文件,这样dll文件就生成了
4、调用其他标准的C++动态库,如test.dll
例如test.dll,是其他人编写的标准的C++动态库,可以在上述注释掉的部分调用,testFn是它里面的函数。
5、在webservice端的java调用
加载库Java2dll,并调用接口函数:
[cpp] view plainprint?
01.static
02.{
03.  //动态库dll文件要放到系统目录或用绝对路径凋用System.load("绝对路径")
04.   System.loadLibrary("Java2dll");
05.}
06.
07./实例化调用类
08.InvokeDll dll = new InvokeDll();
09.
10.//调用函数
11.String strRet = dll.testFunc(a, b)
static
{
//动态库dll文件要放到系统目录或用绝对路径凋用System.load("绝对路径")
System.loadLibrary("Java2dll");
}
//实例化调用类
InvokeDll dll = new InvokeDll();
//调用函数
String strRet = dll.testFunc(a, b)
总结:调用过程:java普通类-->java native类-->jni C++ 动态库-->标准C++动态库,最终实现java普通类对标准C++动态库的调用。
Ⅳ android端怎么调用webservice接口
在Android平台调用Web Service需要依赖于第三方类库ksoap2,它是一个SOAP Web service客户端开发包,主要用于资源受限制的Java环境如Applets或J2ME应用程序(CLDC/ CDC/MIDP)。认真读完对ksoap2的介绍你会发现并没有提及它应用于Android平台开发,没错,在Android平台中我们并不会直接使用ksoap2,而是使用ksoap2 android。KSoap2 Android 是Android平台上一个高效、轻量级的SOAP开发包,等同于Android平台上的KSoap2的移植版本。
Ksoap2-android jar包下载
Ⅵ Android开发中webService接口返回值解析
看一下json解析数据
Ⅶ android怎么调用webservice
WebService是一种基于SOAP协议的远程调用标准,通过webservice可以将不同操作系统平台、不同语言、不同技术整合到一块。在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService。PC版本的WEbservice客户端库非常丰富,例如Axis2,CXF等,但这些开发包对于Android系统过于庞大,也未必很容易移植到Android系统中。因此,这些开发包并不是在我们的考虑范围内。适合手机的WebService客户端的SDK有一些,比较常用的有Ksoap2,可以从http://code.google.com/p/ksoap2-android/downloads/list进行下载;将下载的ksoap2-android-assembly-2.4-jar-with-dependencies.jar包复制到Eclipse工程的lib目录中,当然也可以放在其他的目录里。同时在Eclipse工程中引用这个jar包。
具体调用调用webservice的方法为:
(1) 指定webservice的命名空间和调用的方法名,如:
SoapObject request =new SoapObject(http://service,”getName”);
SoapObject类的第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。第二个参数表示要调用的WebService方法名。
(2) 设置调用方法的参数值,如果没有参数,可以省略,设置方法的参数值的代码如下:
Request.addProperty(“param1”,”value”);
Request.addProperty(“param2”,”value”);
要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。
(3) 生成调用Webservice方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述,代码为:
SoapSerializationEnvelope envelope=new 
SoapSerializationEnvelope(SoapEnvelope.VER11);
Envelope.bodyOut = request;
创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。该版本号需要根据服务端WebService的版本号设置。在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性,该属性的值就是在第一步创建的SoapObject对象。
(4) 创建HttpTransportsSE对象。通过HttpTransportsSE类的构造方法可以指定WebService的WSDL文档的URL:
HttpTransportSE ht=new HttpTransportSE(“http://192.168.18.17:80
/axis2/service/SearchNewsService?wsdl”);
(5)使用call方法调用WebService方法,代码:
ht.call(null,envelope);
Call方法的第一个参数一般为null,第2个参数就是在第3步创建的SoapSerializationEnvelope对象。
(6)使用getResponse方法获得WebService方法的返回结果,代码:
SoapObject soapObject =( SoapObject) envelope.getResponse();
以下为简单的实现一个天气查看功能的例子:
publicclass WebService extends Activity { 
privatestaticfinal String NAMESPACE ="http://WebXml.com.cn/"; 
// WebService地址 
privatestatic String URL ="http://www.webxml.com.cn/
webservices/weatherwebservice.asmx"; 
privatestaticfinal String METHOD_NAME ="getWeatherbyCityName"; 
privatestatic String SOAP_ACTION ="http://WebXml.com.cn/
getWeatherbyCityName"; 
private String weatherToday; 
private Button okButton; 
private SoapObject detail; 
@Override 
publicvoid onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
okButton = (Button) findViewById(R.id.ok); 
okButton.setOnClickListener(new Button.OnClickListener() { 
publicvoid onClick(View v) { 
showWeather(); 
} 
}); 
} 
privatevoid showWeather() { 
String city ="武汉"; 
getWeather(city); 
} 
@SuppressWarnings("deprecation") 
publicvoid getWeather(String cityName) { 
try { 
System.out.println("rpc------"); 
SoapObject rpc =new SoapObject(NAMESPACE, METHOD_NAME); 
System.out.println("rpc"+ rpc); 
System.out.println("cityName is "+ cityName); 
rpc.addProperty("theCityName", cityName); 
AndroidHttpTransport ht =new AndroidHttpTransport(URL); 
ht.debug =true; 
SoapSerializationEnvelope envelope =new SoapSerializationEnvelope( 
SoapEnvelope.VER11); 
envelope.bodyOut = rpc; 
envelope.dotNet =true; 
envelope.setOutputSoapObject(rpc); 
ht.call(SOAP_ACTION, envelope); 
SoapObject result = (SoapObject) envelope.bodyIn; 
detail = (SoapObject) result 
.getProperty("getWeatherbyCityNameResult"); 
System.out.println("result"+ result); 
System.out.println("detail"+ detail); 
Toast.makeText(WebService.this, detail.toString(), 
Toast.LENGTH_LONG).show(); 
parseWeather(detail); 
return; 
} catch (Exception e) { 
e.printStackTrace(); 
} 
} 
privatevoid parseWeather(SoapObject detail) 
throws UnsupportedEncodingException { 
String date = detail.getProperty(6).toString(); 
weatherToday ="今天:"+ date.split("")[0]; 
weatherToday = weatherToday +"\n天气:"+ date.split("")[1]; 
weatherToday = weatherToday +"\n气温:" 
+ detail.getProperty(5).toString(); 
weatherToday = weatherToday +"\n风力:" 
+ detail.getProperty(7).toString() +"\n"; 
System.out.println("weatherToday is "+ weatherToday); 
Toast.makeText(WebService.this, weatherToday, 
Toast.LENGTH_LONG).show(); 
} 
}
Ⅷ android app开发时WEBSERVICE一般用什么技术
可以使用 PHP JAVAWEB .net等后台开发语言 1、PHP 快速的开发语言,可以在最短的时间构建出一个后台项目,但是对于大型项目不怎么适用。 2、.net 微软的开发语言,使用的人占有一定比例,不过开发移动端接口相对而言少些 3、JAVAWEB 大型后端经常使用,语法严谨,但开发周期长。但是现在大多数移动端接口由它来写,而且和Android一样使用的都是Java语言。
Ⅸ android开发什么类型的软件要使用到webService
一般是sns类的,webservice就是web服务提供,通过rest或一些soap api来获取相关的提供商的内容
Ⅹ android平台调用webservice接口
在Android平台调用Web Service需要依赖于第三方类库ksoap2,它是一个SOAP Web service客户端开发包,主要用于资源受限制的Java环境如Applets或J2ME应用程序(CLDC/ CDC/MIDP)。认真读完对ksoap2的介绍你会发现并没有提及它应用于Android平台开发,没错,在Android平台中我们并不会直接使用ksoap2,而是使用ksoap2 android。KSoap2 Android 是Android平台上一个高效、轻量级的SOAP开发包,等同于Android平台上的KSoap2的移植版本。
