Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 809|回复: 0

[实例教程]android系统中使用ksoap2-android客户端库操作Asp.net W

[复制链接]

该用户从未签到

发表于 2011-10-22 13:18:00 | 显示全部楼层 |阅读模式
java中使用的PC版WebService客户端库非常丰富,例如,Axis2、CXF等,但这些开发包对于android来说过于庞大,也未必很容易移植到android上。适合手机的WebService客户端SDK也有一些。本例使用了比较常用的KSOAP2。读者可以从如下的地址下载Android版的KSOAP2。
    http://code.google.com/p/ksoap2-android/wiki/HowToUse?tm=2
    将下载下来的包引用到android项目后就可以使用了,在引用jar包后可能会抛出警告"warning: Ignoring InnerClasses attribute for an anonymous inner class that doesn't come with an associated EnclosingMethod attribute. (This class was probably produced by a broken compiler.)”,在网上搜索了一下,这可能是因为版本的问题,但是不影响使用。好了废话不多说,直接上代码。
    服务器端的webservice文件Demo.asmx
<%@ WebService Language="C#" Class="Demo" %>



using System;

using System.Web;

using System.Web.Services;

using System.Web.Services.Protocols;



[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

//若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。

// [System.Web.Script.Services.ScriptService]

public class Demo  : System.Web.Services.WebService {

    [WebMethod]

    public string HelloWorld() {

        return "Hello World";

    }

   

    [WebMethod]

    public string Add(int x, int y) {

        int z = x + y;

        return z.ToString();

    }

}
下面就是我测试用的手机端的代码了,首先来看我们的xml布局文件 demo.xml
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

  xmlns:android="http://schemas.android.com/apk/res/android"

  android:layout_width="fill_parent"

  android:layout_height="fill_parent"

  androidrientation="vertical">

  <TextView android:id="@+id/tv"

     android:layout_width="fill_parent"

     android:layout_height="wrap_content"

     android:padding="10dip">

  </TextView>

</LinearLayout>
   Demo.java,在下面的代码中,如果你的WebService方法没有参数,可以把step2省略掉。
package com.studio.basf.android;



import org.ksoap2.SoapEnvelope;

import org.ksoap2.serialization.SoapObject;

import org.ksoap2.serialization.SoapPrimitive;

import org.ksoap2.serialization.SoapSerializationEnvelope;

import org.ksoap2.transport.HttpTransportSE;



import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView;



public class Demo extends Activity {

        private String NameSpace = "http://tempuri.org/";

        private String MethodName = "Add";

        private String url = "http://192.168.1.93/services/Demo.asmx";

        private String soapAction = NameSpace + MethodName;

        private TextView tv;



        @Override

        protected void onCreate(Bundle savedInstanceState) {

                // TODO Auto-generated method stub

                super.onCreate(savedInstanceState);

                setContentView(R.layout.demo);



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

                tv.setText(ws());

        }



        public String ws() {

                String result = "";

                try {

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

                        SoapObject request = new SoapObject(NameSpace, MethodName);        

                        

                        //step2 设置调用方法的参数值,这里的参数名称最好和WebService一致

                        request.addProperty("x", 5);

                        request.addProperty("y", 6);

                        

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

                        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(

                                        SoapEnvelope.VER11);

                        //设置是否调用的是dotNet下的WebService

                        envelope.dotNet = true;

                        //必须,等价于envelope.bodyOut = request;

                        envelope.setOutputSoapObject(request);

                        

                        //step4 创建HttpTransportSE对象

                        HttpTransportSE ht = new HttpTransportSE(url);

                        //step5 调用WebService

                        ht.call(soapAction, envelope);

                        

                        //step6 使用getResponse方法获得WebService方法的返回结果

                        if(envelope.getResponse()!=null){

                            SoapPrimitive response = (SoapPrimitive) envelope.getResponse();

                            result = response.toString();

                        }



                } catch (Exception e) {

                        result = e.getMessage();

                }

                return result;

        }

}


运行结果如下
回复

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:18:29 | 显示全部楼层

Re:[实例教程]android系统中使用ksoap2-android客户端库操作Asp.net

学习到很多东西!什么的感谢!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:18:43 | 显示全部楼层

Re:[实例教程]android系统中使用ksoap2-android客户端库操作Asp.net

网络权限也已经添加
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-5-19 02:51 , Processed in 0.367921 second(s), 45 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表