Android 中WebService

一、webService 是什么颗祝?
webservice 是一種跨編程語(yǔ)言 和跨操作系統(tǒng)平臺(tái)的遠(yuǎn)程調(diào)用技術(shù)著蛙。

也就是說(shuō),不管你是java桦山,還是.net 只要按照規(guī)范就可以進(jìn)行通信攒射。實(shí)現(xiàn)數(shù)據(jù)交互等。
這里說(shuō)的"規(guī)范"恒水,WebService平臺(tái)必須提供一套標(biāo)準(zhǔn)的類(lèi)型系統(tǒng)会放,用于溝通不同平臺(tái)、編程語(yǔ)言和組件模型中的不同類(lèi)型系統(tǒng)钉凌。Webservice平臺(tái)必須提供一種標(biāo)準(zhǔn)來(lái)描述Web service鸦概,讓客戶(hù)可以得到足夠的信息來(lái)調(diào)用這個(gè)Web service。最后甩骏,我們還必須有一種方法來(lái)對(duì)這個(gè)Web service進(jìn)行遠(yuǎn)程調(diào)用,這種方法實(shí)際是一種遠(yuǎn)程過(guò)程調(diào)用協(xié)議窗市。Webservice 就是一種部署在網(wǎng)絡(luò)上的API。

WebService是一種基于SOAP協(xié)議的遠(yuǎn)程調(diào)用標(biāo)準(zhǔn)饮笛,SOAP(Simple Object Access Protocol咨察,簡(jiǎn)單對(duì)象訪(fǎng)問(wèn)協(xié)議)是一種輕量級(jí)的、簡(jiǎn)單的福青、基于XML的協(xié)議摄狱,被設(shè)計(jì)用于在分布式環(huán)境中交換格式化和固化信息的簡(jiǎn)單協(xié)議脓诡。也就是說(shuō),要進(jìn)行通信媒役,進(jìn)行數(shù)據(jù)訪(fǎng)問(wèn)傳輸祝谚,就必須依賴(lài)于一定的協(xié)議,而SOAP正是WebService通信中所依賴(lài)的一種協(xié)議酣衷。通過(guò)webservice可以將不同操作系統(tǒng)平臺(tái)交惯、不同語(yǔ)言、不同技術(shù)整合到一塊穿仪。在Android SDK中并沒(méi)有提供調(diào)用WebService的庫(kù)席爽,因此,需要使用第三方的SDK來(lái)調(diào)用WebService啊片。適合手機(jī)的WebService客戶(hù)端的SDK有一些只锻,但目前我在開(kāi)發(fā)中遇到的是Ksoap2,并且搜索了一下紫谷,目前比較常用的是Ksoap2齐饮,其次我對(duì)Ksoap2不是很了解。所以目前只簡(jiǎn)單介紹Ksoap2的使用方法笤昨。

二祖驱、為什么使用webService?

Web Service主要是為了使原來(lái)各孤立的站點(diǎn)之間的信息能夠相互通信咬腋、共享而提出的一種接口羹膳。
Web Service所使用的是Internet上統(tǒng)一、開(kāi)放的標(biāo)準(zhǔn)根竿,如HTTP陵像、XML、SOAP(簡(jiǎn)單對(duì)象訪(fǎng)問(wèn)協(xié)議)寇壳、WSDL等醒颖,所以Web Service可以在任何支持這些標(biāo)準(zhǔn)的環(huán)境(Windows,Linux)中使用。
WebService遵循標(biāo)準(zhǔn)的SOAP協(xié)議壳炎,SOAP協(xié)議的內(nèi)容格式固定泞歉,SOAP協(xié)議傳遞的內(nèi)容是XML數(shù)據(jù),由于WebService是基于HTTP的匿辩,所以簡(jiǎn)單理解SOAP=HTTP+XML腰耙,因?yàn)閃ebService要經(jīng)過(guò)兩次序列化,所以導(dǎo)致其傳輸速度慢铲球,適用于沒(méi)有性能要求且數(shù)據(jù)傳輸量小的場(chǎng)景挺庞,推薦在公開(kāi)接口上使用WebService

webservice離不開(kāi)web服務(wù)器(apache),web服務(wù)器是一個(gè)在公網(wǎng)上提供http通信的服務(wù)器.webservice 一般都建立在web服務(wù)器上,以供別人調(diào)用稼病。
WebService效率差點(diǎn)选侨,走h(yuǎn)ttp協(xié)議掖鱼,一般不會(huì)被防火墻屏蔽。
webservice援制,基于http協(xié)議戏挡,以xml為載體的通信方式。
好處:一直觀(guān)晨仑,二標(biāo)準(zhǔn)褐墅,也方便異構(gòu)系統(tǒng)的交互。
如果想提供對(duì)外的業(yè)務(wù)訪(fǎng)問(wèn)的接口寻歧,可能需要瀏覽器掌栅,各種語(yǔ)言的客戶(hù)端等各種異構(gòu)系統(tǒng)訪(fǎng)問(wèn)秩仆,是首選码泛。

如何使用WebService?

1澄耍、首先導(dǎo)入Ksoap2 jar包
2噪珊、通過(guò)webServiceUtil 中寫(xiě)一個(gè)獲取WebService數(shù)據(jù),返回SoapObject對(duì)象的方法齐莲,只需圖中的幾個(gè)參數(shù)痢站,下面的方法參數(shù)沒(méi)有用到的可以為null。


圖片.png
    /*
     * 獲取WebService數(shù)據(jù)选酗,返回SoapObject對(duì)象阵难。
     * @param Url: WebService服務(wù)地址 (http://webservice.***.com.cn/WeatherWS.asmx)
     * @param NameSpace: WebService的服務(wù)的命名空間,可以WSDL數(shù)據(jù)中找到 (http://***.com.cn/)
     * @param MethodName: WebService的調(diào)用函數(shù)方法名稱(chēng)(getDataMethod)
     * @param Maps: 請(qǐng)求服務(wù)需要提交的數(shù)據(jù)集
     * @param SoapHeadeName: 設(shè)置WebService的HTTP頭名稱(chēng)
     * @param SoapHeadeValues: 設(shè)置 SoapHeade 的數(shù)據(jù)集
     * @Return: 服務(wù)返回SoapObject對(duì)象
     * @Exception: 寫(xiě)入控制臺(tái)日志
     */ public SoapObject GetObject(String Url, String NameSpace, String MethodName, Map<String, String>  RequestDatas, String SoapHeadeName, Map<String, String> SoapHeadeValues) {
        SoapObject result;

        try {
             
            SoapObject soap = new SoapObject(NameSpace, MethodName);
             
            // 系統(tǒng)日志輸出
            if(_iswritelog) System.out.println("[URL] : "   + Url);
            if(_iswritelog) System.out.println("[NameSpace] : " + NameSpace);
            if(_iswritelog) System.out.println("[MethodName] : "    + MethodName);
            if(_iswritelog) System.out.println("[SOAP Action] : "+ NameSpace+MethodName);
            StringBuffer requestParams = new StringBuffer();
            // 設(shè)置WebService提交的數(shù)據(jù)集
            if (RequestDatas != null && !RequestDatas.isEmpty()) {
                for (Map.Entry<String, String> entry : RequestDatas.entrySet()) {
                    soap.addProperty(entry.getKey(),  entry.getValue());
                    requestParams.append( entry.getKey() + "=" + entry.getValue() + " ");
                }
            }
            if(_iswritelog) System.out.println("[SOAP Params] : "+ requestParams.toString());
     
            // 設(shè)置HTTP頭信息
            Element[] header = null;
            if(SoapHeadeName != null && SoapHeadeValues != null && !SoapHeadeValues.isEmpty())
            {
                    header = new Element[1];
                    header[0] = new Element().createElement(NameSpace, SoapHeadeName);
                 
                    for (Map.Entry<String, String> entry : SoapHeadeValues.entrySet()) {
                        Element element = new Element().createElement(NameSpace, entry.getKey());
                        element.addChild(Node.TEXT, entry.getValue());
                        header[0].addChild(Node.ELEMENT, element);
                }
            }   
     
            // 初始化數(shù)據(jù)請(qǐng)求
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet = _isdotnet;
            if(header  != null)envelope.headerOut = header;
            envelope.bodyOut = soap;
            envelope.setOutputSoapObject(soap); 
             
            // 發(fā)起Web請(qǐng)求
            HttpTransportSE http = new HttpTransportSE(Url, _setHttpTimeOut);
            http.debug = _isdebug;
            http.call(NameSpace+MethodName , envelope);
             
            // 獲取Web請(qǐng)求結(jié)果芒填, 數(shù)據(jù)需要從 result.getProperty(0) 獲取
           result = (SoapObject) envelope.bodyIn;
             
            if(_iswritelog) System.out.println("[SOAP.getPropertyCount] : " + result.getPropertyCount());
             
            return result;
 
        } catch (Exception e) {
            if(_iswritelog) 
                System.err.println("[Http Exception] : "    + e.getMessage());
            result = null;
        }
        return result;
    }

總結(jié):雖然寫(xiě)了這篇文章呜叫,但我對(duì)webService并不是非常的理解,目前只知道他的簡(jiǎn)單的用法殿衰,上網(wǎng)查了一下朱庆,目前用webService的Android項(xiàng)目很少,希望能幫助你們一點(diǎn)闷祥。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末娱颊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子凯砍,更是在濱河造成了極大的恐慌箱硕,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悟衩,死亡現(xiàn)場(chǎng)離奇詭異剧罩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)局待,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)斑响,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)菱属,“玉大人,你說(shuō)我怎么就攤上這事舰罚∨γ牛” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵营罢,是天一觀(guān)的道長(zhǎng)赏陵。 經(jīng)常有香客問(wèn)我,道長(zhǎng)饲漾,這世上最難降的妖魔是什么蝙搔? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮考传,結(jié)果婚禮上吃型,老公的妹妹穿的比我還像新娘。我一直安慰自己僚楞,他們只是感情好勤晚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著泉褐,像睡著了一般赐写。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上膜赃,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天挺邀,我揣著相機(jī)與錄音,去河邊找鬼跳座。 笑死端铛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的躺坟。 我是一名探鬼主播沦补,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼咪橙!你這毒婦竟也來(lái)了夕膀?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤美侦,失蹤者是張志新(化名)和其女友劉穎产舞,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體菠剩,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡易猫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了具壮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片准颓。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哈蝇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出攘已,到底是詐尸還是另有隱情炮赦,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布样勃,位于F島的核電站吠勘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏峡眶。R本人自食惡果不足惜剧防,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辫樱。 院中可真熱鬧峭拘,春花似錦、人聲如沸搏熄。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)心例。三九已至,卻和暖如春鞋囊,著一層夾襖步出監(jiān)牢的瞬間止后,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工溜腐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留译株,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓挺益,卻偏偏與公主長(zhǎng)得像歉糜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子望众,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 一匪补、Java基礎(chǔ) 1.寫(xiě)出下面代碼的執(zhí)行結(jié)果 2.寫(xiě)出下面代碼的執(zhí)行結(jié)果 3.寫(xiě)出下面代碼的執(zhí)行結(jié)果 (此題需寫(xiě)出...
    joshul閱讀 512評(píng)論 0 1
  • 一、課程介紹 一位偉大的講師曾經(jīng)說(shuō)過(guò)一句話(huà):事物存在即合理烂翰!意思就是說(shuō):任何存在的事物都有其存在的原因夯缺,存在的一切...
    跟著阿笨一起玩NET閱讀 1,396評(píng)論 1 6
  • 最近“佛系”這個(gè)關(guān)鍵詞刷爆了網(wǎng)絡(luò), “佛系”的標(biāo)簽的確是一種值得學(xué)習(xí)的生活態(tài)度甘耿,但是踊兜,如果想有所成就,想不虛度此生...
    懶李個(gè)浪閱讀 235評(píng)論 0 0
  • 聽(tīng)說(shuō)佳恬,選擇一件事捏境,每天堅(jiān)持去做很難于游。我選擇了一件容易的事情堅(jiān)持——晚八點(diǎn)的食客。 這個(gè)周末很閑垫言,閑的時(shí)候曙砂,時(shí)間是自...
    竹秀竹閱讀 146評(píng)論 0 0
  • 以清凈之心看世界,用感恩之心過(guò)生活骏掀。安心鸠澈,才能開(kāi)心。真正的安心截驮,不是達(dá)成自己的愿望笑陈,因?yàn)橛o(wú)邊,而是淡然葵袭。壁...
    來(lái)喜wzf閱讀 203評(píng)論 0 3