zoukankan      html  css  js  c++  java
  • android call webservice by ksoap 实例代码

    工作中要调用webservice,现在就把一天的工作过程给总结一下,本人是菜鸟,希望后来的人少花些时间,就心满意足了。

    前4部是外围的准备工作,第五步是webservice的实现。

    1.首先下载ksoap包。http://download.csdn.net/detail/Imain/3670701这个csdn上可以下载,国外的网站下起来有点费劲。

    2.因为访问internet所以在项目的manifest配置文件中加入    <uses-permission android:name="android.permission.INTERNET" />

    我的manifest就如下面的一样。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.test"
        android:versionCode="1"
        android:versionName="1.0" >

        <uses-sdk android:minSdkVersion="10" />
        <uses-permission android:name="android.permission.BLUETOOTH" />
        <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
        <uses-permission android:name="android.permission.INTERNET" />
        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <activity
                android:name=".BTTestActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    </manifest>

    3.将ksoap包加入到项目中。这一步要是不清楚,在google上搜“eclipse  添加外部jar ”,应该会有答案。

    4.在main activity 中启动新线程调用webservice。注意必须在独立线程中进行调用,否则会报异常。android不允许访问UI的线程去调用webservice。因为那很花时间。

    具体代码如下: webservicehd  是在主线程中定义的一个handler,用于处理服务调用返回的消息。

        new Thread(){
         public void run(){
          String temp = WebServiceUtils.setPhoneMAC(1,"hello from android");
          Message msg = webservicehd.obtainMessage();
          Bundle b = new Bundle();
          b.putString("returnvalue", temp);
          msg.setData(b);
          msg.sendToTarget();
         }
        }.start();

    5.好了,现在正式进入web service的细节层面。我在容易出问题的地方进行了标注,其他的照抄就可以了。这个链接可以只看webservice的概念部分,例子就不用了吧。http://www.cnblogs.com/ghj1976/archive/2011/04/26/2028904.html

    import org.ksoap2.SoapEnvelope;
    import org.ksoap2.serialization.MarshalBase64;
    import org.ksoap2.serialization.SoapObject;
    import org.ksoap2.serialization.SoapSerializationEnvelope;
    import org.ksoap2.transport.HttpTransportSE;

    public class WebServiceUtils {
      private static final String NAMESPACE = "http://www.e-mapping.com/";
      // WebService地址
      private static String URL = "http://66.18.231.40/bussys/messagesend/MessageSender.asmx"; //注意,不要带.WSDL
      private static final String METHOD_NAME = "setMAC";
      private static String SOAP_ACTION = "http://www.e-mapping.com/setMAC";//命名空间+方法名
      private static SoapObject resultSoapObject;
         public static String setPhoneMAC(int stuid,String mac){
          SoapObject soapObject = new SoapObject(NAMESPACE,METHOD_NAME);
          soapObject.addProperty("stuid",stuid);
          soapObject.addProperty("mac", mac);//定义对象,封装方法所需的参数
          
          SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);//注意此处的版本号需要与服务器端的soap保持一致,否则报异常。试试10,11,12哪个能用就行
          envelope.bodyOut = soapObject;
          envelope.dotNet = true;
          envelope.setOutputSoapObject(soapObject);
          (new MarshalBase64()).register(envelope);//注册,不知道这个语句有没有用,反正我加上了
          HttpTransportSE ht = new HttpTransportSE(URL);
          ht.debug = true;

          try{
              ht.call(SOAP_ACTION, envelope);
              resultSoapObject = null;
              resultSoapObject = (SoapObject)envelope.bodyIn;//注意这里不能用getResponse();否则报cast错误,至于getResponse()返回了啥东西,怎么解析,不管了,能用就行。
              if(resultSoapObject.getProperty(0).toString().equals("true"))
                return "true";
              else
                 return "false";
          }catch(Exception e){   
          }

         }

  • 相关阅读:
    Redis过期机制
    vim使用
    ex command in Linux with examples
    【转】Linux 文档编辑 : ex 命令详解
    vscode go语言环境搭建
    golang slice a 的地址和a[0]的地址不一样
    文件加锁,作用是用来做什么?以及使用细节
    文件锁
    go创建指定大小的文件,获取文件大小
    go 实现内存映射和进程间通信
  • 原文地址:https://www.cnblogs.com/shallwe99/p/2413923.html
Copyright © 2011-2022 走看看