Android 访问 WSDL 接口复习

  Android 访问 WSDL接口复习

什么是 webserviece

可以到 http://www.w3school.com.cn/webservices/ 去了解一下

重要的内容如下:

Web Services 可以将应用程序转换为网络应用程序。

通过使用 Web Services,您的应用程序可以向全世界发布信息,或提供某项功能。

Web Services 可以被其他应用程序使用。

通过 Web Services,您的会计部门的Win 2k 服务器可以与IT 供应商的UNIX 服务器相连接。

基本的 Web Services 平台是XML+HTTP

Web services 使用 XML来编解码数据,并使用 SOAP来传输数据。

重要的是:基于http post 的传输协议soap;

soap 是什么;

SOAP消息基本上是从发送端到接收端的单向传输,但它们常常结合起来执行类似于请求 /应答的模式。

所有的 SOAP消息都使用XML 编码。一条SOAP消息就是一个包含有一个必需的SOAP 的封装包,

一个可选的 SOAP 标头和一个必需的SOAP 体块的XML 文档。

SOAP 绑定到HTTP 提供了同时利用SOAP 的样式和分散的灵活性的特点以及HTTP 的丰富的特征库的优点。

HTTP上传送SOAP 并不是说SOAP 会覆盖现有的HTTP 语义,而是HTTP 上的SOAP 语义会自然的映射到HTTP 语义。

在使用 HTTP 作为协议绑定的场合中,RPC 请求映射到HTTP 请求上,而RPC 应答映射到HTTP 应答。

然而,在 RPC 上使用SOAP 并不仅限于HTTP 协议绑定。SOAP也可以绑定到TCPUDP协议上。

来看一下我们android 中如何访问一个webservice 接口,说白 就是如何从目标wsdl文件 获取信息;

直接上代码;

小白我问题又来了:请求网络用什么方法了,或者用什么类访问一个wsdl 文件了???

来访问一把看看;

http://www.webxml.com.cn/WebServices/WeatherWebService.asmx

 

好吧,废话不说直接说:

Android 端访问 wsdl文件需要一个第三方类库Ksoap2-android

网上关于Ksoap2-android 很多自己有兴趣可以一查;

Ksoap2-android简介
      Android平台调用Web Service需要依赖于第三方类库ksoap2,它是一个SOAP Web service客户端开发包,主要用于资源受限制的Java环境如AppletsJ2ME应用程序(CLDC/ CDC/MIDP)。认真读完对ksoap2的介绍你会发现并没有提及它应用于Android平台开发,没错,在Android平台中我们并不会直接使用ksoap2,而是使用ksoap2 androidKSoap2 AndroidAndroid平台上一个高效、轻量级的SOAP开发包,等同于Android平台上的KSoap2的移植版本。

猜猜我下好了这个jar

 

贴出访问的核心代码;一个外网的。.net wsdl

http://www.webxml.com.cn/WebServices/WeatherWebService.asmx

POST /WebServices/WeatherWebService.asmx HTTP/1.1

Host: www.webxml.com.cn

Content-Type: application/soap+xml; charset=utf-8

Content-Length: length

 

<?xml version="1.0" encoding="utf-8"?>

<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">

  <soap12:Body>

    <getSupportCity xmlns="http://WebXml.com.cn/">

      <byProvinceName>string</byProvinceName>

    </getSupportCity>

  </soap12:Body>

</soap12:Envelope>

HTTP/1.1 200 OK

Content-Type: application/soap+xml; charset=utf-8

Content-Length: length

 

<?xml version="1.0" encoding="utf-8"?>

<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">

  <soap12:Body>

    <getSupportCityResponse xmlns="http://WebXml.com.cn/">

      <getSupportCityResult>

        <string>string</string>

        <string>string</string>

      </getSupportCityResult>

    </getSupportCityResponse>

  </soap12:Body>

</soap12:Envelope>

package com.xiangsc.webserversdemo;

 

import org.ksoap2.SoapEnvelope;

import org.ksoap2.serialization.SoapObject;

import org.ksoap2.serialization.SoapSerializationEnvelope;

import org.ksoap2.transport.HttpTransportSE;

 

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.text.TextUtils;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

 

public class MainActivityextends Activity implements OnClickListener {

private EditText nr;

private Button get;

private TextView tv;

private Handler handler=new Handler(){

public void handleMessage(android.os.Message msg) {

if(msg.what==200){

String showinfo=(String)msg.obj;

tv.setText(showinfo);

}

};

};

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

}

 

private void loadInfo(final String snm) {

new Thread() {

public void run() {

// 指定WebService的命名空间和调用的方法名

SoapObject rpc = new SoapObject(Const.WeBNamespace,Const.Method);

// 设置需调用WebService接口需要传入的两个参数mobileCode、userId

rpc.addProperty("byProvinceName", snm);

// 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);

envelope.bodyOut = rpc;

// 设置是否调用的是dotNet开发的WebService 此句话看你调用后台是不是.net 不是就改为false

// 我在项目中用的是JSF gai wei false

envelope.dotNet = true;

// 等价于envelope.bodyOut = rpc;

envelope.setOutputSoapObject(rpc);

//HttpTransportSE so 网络请求的封装类

HttpTransportSE transport = new HttpTransportSE(Const.URL);

try {

// 调用WebService

transport.call(Const.WeBNamespace + Const.Method, envelope);// 获取返回的数据

SoapObject object = (SoapObject) envelope.bodyIn;

// 获取返回的结果

String result = object.getProperty(0).toString();

Message msg=Message.obtain();

msg.what=200;

msg.obj=result;

handler.sendMessage(msg);

} catch (Exception e) {

e.printStackTrace();

}

 

 

}

 

}.start();

}

 

private void initView() {

nr = (EditText) findViewById(R.id.et);

get = (Button) findViewById(R.id.get);

get.setOnClickListener(this);

tv = (TextView) findViewById(R.id.tv);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

 

@Override

public void onClick(View v) {

String snm=nr.getText().toString().trim();

if(!TextUtils.isEmpty(snm)){

loadInfo(snm);

}

}

 

}

 

运行结果如图,Demo 非常陋大神们莫笑

Demo下载地址 http://download.csdn.net/detail/qq_30519365/9533911


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江南一舟110

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值