真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android中如何調(diào)用WebService

這篇文章給大家介紹Android中如何調(diào)用WebService,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)站空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、綏化網(wǎng)站維護(hù)、網(wǎng)站推廣。

首先在Android中通訊,我們必不可少的那便是Handler,Thread。

由于Android的機(jī)制,我們需要考慮

  1. UI線程不能處理耗時(shí)操作,顯然通訊屬于耗時(shí)操作。所以我們用到Thread

  2. 子線程不能更新UI線程,所以我們需要用Handler機(jī)制來(lái)通知UI線程做出反應(yīng)

由于服務(wù)器語(yǔ)種我們需要考慮

目前主要用2種語(yǔ)言開發(fā)的WebService Java和.net

結(jié)合上述的考慮,那么大致的思路是不有點(diǎn)眉目了!

試著寫寫吧!

首先創(chuàng)建一個(gè)類WebService

基本上請(qǐng)求有開始,正在請(qǐng)求,發(fā)生錯(cuò)誤,成功,結(jié)束請(qǐng)求5種狀態(tài)

我們便添加Handler處理消息的類別甄別,當(dāng)然這里可以直接定義,而我這里是定一個(gè)內(nèi)部類作為甄別類。

 class MsgCode {
        public final static int STATR = 0x01; //開始
        public final static int ERROR = 0x02; //錯(cuò)誤
        public final static int SUSSCE = 0x03;//成功
        public final static int FINALY = 0x04;//結(jié)束
        public final static int PROGRESS = 0x05;//正在請(qǐng)求中
    }

接下來(lái)我們想想我們WebService請(qǐng)求一般來(lái)說(shuō)需要哪些參數(shù),羅列一下我們需要下面6類。

  1. 服務(wù)器URL

  2. 命名空間URL

  3. 請(qǐng)求的函數(shù)名稱

  4. 請(qǐng)求的參數(shù)列表

  5. 請(qǐng)求的服務(wù)器類別

  6. Handler處理消息對(duì)象

羅列完畢,那我們的思路便更加明確了。這時(shí)候我們建立一個(gè)start函數(shù),這里請(qǐng)求參數(shù)列表用Map便讓key value的形式完全和webservice的參數(shù)形式對(duì)應(yīng)了。

public static void start(final String sv_url, final String ns_url,
            final String mthd, final HashMap params,
            final boolean isdotnet, final Handler callback) {
        new Thread(new Runnable() {
            @Override
            public void run() {
              //webservice調(diào)用處理方法
            }
        }).start();

    }

現(xiàn)在來(lái)讓我們具體用代碼回顧一下上一篇文章講的

Android如何進(jìn)行WebService調(diào)用,我們定義一個(gè)調(diào)用的具體函數(shù)start_函數(shù),參數(shù)與start相同。

static void start_(String serviceUrl, String namespaceUrl,
            String serviceMethod, HashMap params,
            boolean isDotNet, Handler handler) {
            }

接下來(lái)我們一步一步的回顧一下上一篇講的如何調(diào)用

//構(gòu)建SoapSerializationEnvelope
SoapSerializationEnvelope evlp = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);//對(duì)應(yīng)于Ksoap 1.1規(guī)范
//構(gòu)建SoapObject 
SoapObject soapobject = new SoapObject(namespaceUrl, serviceMethod);
//構(gòu)建傳輸?shù)膮?shù)列表
//設(shè)置SoapObject 
evlp.bodyOut = soapobject; 
//你也可以如此
evlp.setOutputSoapObject(soapobject);
//設(shè)置是否為.net
evlp.dotNet = isDotNet;
//這里有個(gè)timeout超時(shí)我們可以定義一個(gè)在類里面定義靜態(tài)常量50s作為超時(shí)時(shí)間可根據(jù)需要修改
private static int timeout = 1000 * 50;
HttpTransportSE hts = new HttpTransportSE(serviceUrl, timeout);
//調(diào)用        注意,這里有個(gè)actionUrl是namespaceUrl+serviceMethod的結(jié)果,
//一般是服務(wù)器?wsdl 里面的targetNamespace+ 函數(shù)name
hts.call(actionUrl, evlp);
//接收結(jié)果
Object result = evlp.getResponse();
//或者
Object result =  evlp.bodyIn;

當(dāng)然上面的代碼直接copy過(guò)去是不能直接用的我們仔細(xì)想想,我們?nèi)绷四男?/p>

首先我們?nèi)绷藰?gòu)建參數(shù)列表好!下面我創(chuàng)建一個(gè)addParam函數(shù)通過(guò)遍歷HashMap來(lái)添加參數(shù)列表

private static void addParam(SoapObject soapobject,
            HashMap params) {
        // TODO Auto-generated method stub
        if (params != null && !params.isEmpty()) {
            Iterator iter = params.entrySet().iterator();
            while (iter.hasNext()) {
                Map.Entry entry = (Map.Entry) iter.next();
                Object key = entry.getKey();
                Object val = entry.getValue();
                PropertyInfo pi = new PropertyInfo();
                pi.setName(key.toString());
                pi.setValue(val);
                pi.setType(val.getClass());
                soapobject.addProperty(pi);
                //當(dāng)然你如果只傳字符串直接上面PropertyInfo pi = new PropertyInfo();
                //以后的注釋掉直接用下面的也行
                // soapobject.addProperty(key.toString(), val.toString());
            }
        }
    }
//構(gòu)建傳輸?shù)膮?shù)列表處加上下面的語(yǔ)句
addParam(soapobject, params);

讓我們?cè)倏纯瓷倭诵┦裁矗?/p>

對(duì)我們少了handler機(jī)制處理,來(lái)讓我們加上!start_函數(shù)就變成下面這個(gè)樣子

/**
     * 調(diào)用的具體函數(shù)
     * 
     * @param serviceUrl
     * @param namespaceUrl
     * @param serviceMethod
     * @param params
     * @param isDotNet
     * @param handler
     */
    static void start_(String serviceUrl, String namespaceUrl,
            String serviceMethod, HashMap params,
            boolean isDotNet, Handler handler) {
        // TODO Auto-generated method stub
        String actionUrl = namespaceUrl + serviceMethod;
        handler.obtainMessage(MsgCode.STATR).sendToTarget();
        SoapObject soapobject = new SoapObject(namespaceUrl, serviceMethod);
        addParam(soapobject, params);
        SoapSerializationEnvelope evlp = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);
        evlp.bodyOut = soapobject;
        evlp.dotNet = isDotNet;
        evlp.setOutputSoapObject(soapobject);
        HttpTransportSE hts = new HttpTransportSE(serviceUrl, timeout);
        try {
            hts.call(actionUrl, evlp);
            Object result = evlp.getResponse();
            if (result.getClass().isAssignableFrom(SoapFault.class)) {
                handler.obtainMessage(MsgCode.ERROR, result).sendToTarget();
            } else {
                handler.obtainMessage(MsgCode.SUSSCE, result).sendToTarget();
            }
        } catch (HttpResponseException e) {
            // TODO Auto-generated catch block
            handler.obtainMessage(MsgCode.ERROR, e.getMessage()).sendToTarget();
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            handler.obtainMessage(MsgCode.ERROR, e.getMessage()).sendToTarget();
            e.printStackTrace();
        } catch (XmlPullParserException e) {
            // TODO Auto-generated catch block
            handler.obtainMessage(MsgCode.ERROR, e.getMessage()).sendToTarget();
            e.printStackTrace();
        }
        handler.obtainMessage(MsgCode.FINALY).sendToTarget();
    }

關(guān)于Android中如何調(diào)用WebService就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。


本文名稱:Android中如何調(diào)用WebService
文章地址:http://weahome.cn/article/pshods.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部