使用KSoap2-anroid连接WebService并保持Session

本文介绍了如何使用KSoap2-android库连接WebService,并着重讲解了保持Session的关键步骤,包括导入jar包、设置连接参数以及处理Session的维持。内容涵盖了命名空间、方法名、URL等关键信息,适合Android开发者参考。
摘要由CSDN通过智能技术生成

使用KSoap2-anroid连接WebService并保持Session

大家好!我是小渣渣。最近在做一些应用需要访问webservice,所以在网上搜了很多资源。 发现大家都是在用Ksoap2-android 这么一个工具来访问ebservice的,因为是对于这块并不是很熟悉,遇到了很多问题。故此写了这一边篇技术blog!
不想写太多代码,我把关键步骤贴出来就好了==。因为我很懒,请骂醒我!


* 1,导入jar包

jar包连接ksoap-android3.6.0.jar资源下载。

下载后像一般的导入到 libs 文件夹下就好了。但是有一点需要注意的地方就是,需要将 libs 文件夹加入 class Folder。这一点很重要。否则在运行时他是引用不到ksoap的一些类。就会抛出没有什么什么类的异常。具体原因我自己也不是很了解。如果有知道的小伙伴请告知一下!谢谢


* 2,完成了导入jar的工作后,就开始正式的连接webservice。

通过wsdl我们需要知道的四个参数

#
1,NameSpace(命名空间)
#
2,MethodName(需要调用的方法名)
#
3,url/endPoint(就是去掉了后缀 ?wsdl后的地址)
#
4,SoapAction(其实就是命名空间+方法名,但是在我的应用中是为null。我也不知道其中原理,有知道的小伙伴之评论下方告诉我!阿里嘎多)



什么?看到这里你跟我说”我不懂什么是webservice”。啥也别说了!提供一个连接给你自己去学习学习。WebService之介绍

我大部分也是看人家的blog学习的。末尾我会把相关连接都发出来

public static String WebServiceGetConn(String nameSpace,String methodName,String url,String soapPoint,HashMap<String,Object> map)
{
    //指定webservice的命名空间和调用的方法名
    SoapObject object = new SoapObject(nameSpace,methodName);

    for(Entry<String,Object> entry:map.entrySet())
    {
        object.addProperty(entry.getKey(),entry.getValue());
    }

    // 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
    //报错有时也是版本号没有写对的原因。 
    //至于版本号应该选择什么样的,我也是没有搞清楚
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);  

    envelope.bodyOut = object;
    envelope.doNet = false; //这个问你的服务端是不是.net写的!不是就false;         
    envelope.setOutputSoapObject(rpc);// 等价于envelope.bodyOut = rpc;  

     HttpTransportSE transport = new HttpTransportSE(endPoint);  
    try {  
        // 这才是真正的去访问网络调用WebService了,记得加权限  
        transport.call(soapAction, envelope);  
    } catch (Exception e) {  
        e.printStackTrace();  
    }  

    // 获取返回的数据  
    SoapObject object = (SoapObject) envelope.bodyIn;
    //如果返回的是字符串类型的,那么上面这句话就会报错,这时你可以用这种方法
    Object obj = (Object)envelope.getResponse(); 
    //然后直接return obj.toString()就好了,下面的步骤就不要了 

    // 获取返回的结果  
    String result = object.getProperty(0).toString();  

    // 将WebService返回的结果显示在TextView中  
    resultView.setText(result);

}



当然这些都只是非常简单的东西,有时你的webservice还要求你传一些对象之类的参数。那么这些东西我也是要慢慢的学习。下次就再写一篇关如何传递对象。




啊啊啊?什么?你问我”你不是说还要保持session吗?”

*3,对对对!我TM差点忘了。咳咳!其实很简单。
    //当你调用transport.call()传入三个参数时,就可以看到他会返回一个List
     List<HeaderProperty> headerList = androidHttpTransport.call(SOAP_ACTION, envelope, null);

    for (Object header :headerList) {   
        HeaderProperty headerProperty = (HeaderProperty) header;
        String headerKey = headerProperty.getKey();     
        String headerValue = headerProperty.getValue();                      System.out.println(headerKey +" : " + headerValue);                 sharedPreferenceEditor.putString(headerKey,            headerValue);
    //那么这个key 就是 Set-Cookie
    //value 就是session啦
    }

什么?你说为什么服务端返回给你的是Cookie?不要问我这么高难度的问题好吗?自己去寻找一下答案!


那么问题来了!wajuejijishunajiaqiang?不是不是。我们获得了服务器传给我们的session,应该怎么再回传给服务端?都写到这里了,应该有很多朋友已经想到了。

//前面不是说了call的三个参数吗?第三个参数就是可以传一个List<HeaderProperty>
//第一次获取session时,是传的null 
HeaderProperty headerPropertyObj = new HeaderProperty("cookie", "这里传你获取到的value");

headerList.add(headerPropertyObj);  

androidHttpTransport.call(SOAP_ACTION, envelope, headerList);

链接发不了了!因为我都忘记在哪里看的了!

<他全身穿的都是我们蓝猫品牌的衣服(~ ̄▽ ̄)~>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值