android 访问webservice(实例讲解一行代码实现)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/csdn_mm/article/details/80781488

本文主要讲如何和webservice交互,至于一行代码实现,是因为调用了下面的方法。哈哈,意不意外

  /**
     * 请求webservice的步骤
     * @param wsdl_url   wsdl 的uri,接口地址 类似于这种:http://47.95.217.28:8080/services/translateMacs?wsdl
     * @param name_sapce  命名空间 在wsdl_url链接里面有命名空间相关信息。
     * @param methodName  方法名
     * @param map  传给webservice的参数。
     * @return
     */
    public static String questToWebService(String wsdl_url,String name_sapce,String methodName,HashMap<String,String> map) {
        String result = "";
        //(1)创建HttpTransportSE对象,该对象用于调用WebService操作
        HttpTransportSE httpTransportSE = new HttpTransportSE(WSDL_URI,90*1000);
        //(2)创建SoapSerializationEnvelope对象
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);
        //(3)创建SoapObject对象,创建该对象时需要传入所要调用的Web Service的命名空间和WebService方法名
        SoapObject request = new SoapObject(NAME_SPACE, methodName);
        //(4) //填入需要传入的参数
        Iterator iterator = map.keySet().iterator();
        while (iterator.hasNext()){
            String key = (String) iterator.next();
            String value = map.get(key);
            request.addProperty(key,value);
        }
        //(5)调用SoapSerializationEnvelope的setOutputSoapObject()方法,或者直接对bodyOut属性赋值,
        //将前两步创建的SoapObject对象设为SoapSerializationEnvelope的传出SOAP消息体
        envelope.bodyOut = request;
//        envelope.setOutputSoapObject(request);
        try {
            //(6)调用对象的call()方法,并以SoapSerializationEnvelope作为参数调用远程的web service
            httpTransportSE.call(methodName, envelope);//调用
            if (envelope.getResponse() != null) {
                result = envelope.getResponse().toString().trim();
            }
            return result;
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        }
        //解析该对象,即可获得调用web service的返回值

        return result;
    }

在调用这个方法之前,有很多准备工作需要做。

  • 校验接口文档中的信息和服务端实际信息是否一致

先看一下接口文档
这里写图片描述

通过接口文档我们了解我们需要的信息
1.接口请求方式 webservice
2.接口请求地址:http://47.95.217.28:8080/services/translateMacs?wsdl
3.方法名:translateMacs
4.方法里的2个参数,参数类型。

看完这些信息后,打开接口地址,检查接口文档中的信息和接口中的实际信息是否一致。
下图中标注的地方都是需要关注的。
这里写图片描述

上图标注1对应questToWebService方法中的nameSpace,
标注2对应questToWebService方法中的SoapEnvelope.VER10,
标注3对应questToWebService方法中的methodName,
标注4封住为questToWebService方法中的map。
确保以上信息和接口文档中的信息对应后,进行下一步操作。

  • 准备questToWebService方法中的参数信息。
    获取Mac列表,并用Gson转为json字符串。
 /**
     * 模拟数据,获取mac列表
     * @return
     */
    private String getMacs() {
        List<HashMap<String,String>> macs = new ArrayList<>();
        HashMap<String,String> map = new HashMap<>();
        map.put("Mac","353765072974752");
        macs.add(map);
        map = new HashMap<>();
        map.put("Mac","353765072974753");
        macs.add(map);
        return mGson.toJson(macs);
    }

将接口中需要的请求参数封装到map中

 /**
     * 将接口需要的所有参数封装到hashmap中
     * @return
     */
    private HashMap<String,String> getRequestHashMapFortranslateMacs() {
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("macsListc", getMacs());
        map.put("requestTime",  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        return map;

    }

至此准备工作完成了,

  • 调用和webservice交互的方法
 String wsdl_url = "http://47.95.217.28:8080/services/translateMacs?wsdl";
    String name_sapce = "http://webservice.observer.com/";
    questToWebService(wsdl_url,name_sapce,"translateMacs", getRequestHashMapFortranslateMacs());

结束了。以上信息仅供参考,因为接口不是公共接口。如果对你有益,记得点赞啊。

展开阅读全文

没有更多推荐了,返回首页