1. 主页 > 小妙招

Android移动端调用WebServic的三种高效方案

浣犵殑App鏄笉鏄€诲湪鍔犺浇鏁版嵁鏃惰浆鍦堝湀锛熷悗鍙板皬鍝ヨ鐢ㄤ簡WebService鎺ュ彛浣嗗搷搴旀參锛熶粖澶╁挶浠氨鍞犲敔Android寮€鍙戜腑鏈€璁╂柊鎵嬪ご鐤肩殑WebService璋冪敤闂鈥斺€斿埆鎷呭績锛屾垜褰撳勾涔熻SOAP鍗忚鎼炲緱鎬€鐤戜汉鐢燂紝鍜变滑浠庡疄鎴樿搴︽墥鎷変笁绉嶉潬璋辨柟妗堬紒

锛堝挸鍜筹紝鍏堣В閲婁笅鍟ユ槸WebService锛熺畝鍗曡灏辨槸璁╂墜鏈篈pp鍜屾湇鍔″櫒璇翠笂璇濈殑缈昏瘧瀹橈紝鑳芥妸浣犵殑璇锋眰鎵撳寘鎴怷ML鎴朖SON閫佽繃鍘伙紝鍐嶆妸缁撴灉瑙e寘鍥炴潵銆備笉杩嘇ndroid杩欑唺瀛╁瓙鍜學ebService澶勫璞℃椂鐗瑰埆瀹规槗闂瑰埆鎵?..锛?/p>


鏂规涓€锛欿SOAP2纭牳鐩磋繛娉?/h3>

馃憠 鈥?strong>鈥嬮€傚悎浜虹兢鈥?/strong>鈥嬶細鎺ユ墜鐨勯」鐩繕鍦ㄧ敤涓婂彜SOAP鍗忚锛屾垨鏄杩淮鎶ら仐鐣欑郴缁熺殑鍊掗湁铔?/p>

杩欑帺鎰忓効鍫ОAndroid鐣岀殑娲诲寲鐭筹紝涓撴不鍚勭涓嶆湇姘旂殑SOAP鎺ュ彛銆傝寰楃涓€娆$敤鐨勬椂鍊欙紝鍏夊懡鍚嶇┖闂撮厤缃氨璁╂垜鎺変簡涓夋牴澶村彂锛堝埆绗戯紒锛夊叿浣撴€庝箞鐜╋紵

  1. 鍏堝線椤圭洰閲屽杩欎釜渚濊禆锛?/li>
gradle澶嶅埗
implementation 'com.google.code.ksoap2-android:ksoap2-android:3.6.4'
  1. 鐒跺悗鎼炰釜SOAP璇锋眰妯℃澘锛?/li>
java澶嶅埗
SoapObject request = new SoapObject("http://tempuri.org/", "GetWeather");
request.addProperty("cityName", "鍖椾含"); //鍙傛暟灏卞儚寰€娉¢潰閲屽姞鏂?/span>
  1. 璁剧疆閫氫俊绠¢亾鏃跺緱娉ㄦ剰杩欎釜鍧戯細
java澶嶅埗
HttpTransportSE transport = new HttpTransportSE("http://xxx.asmx", 60000);
transport.debug = true; //璋冭瘯鏃舵墦寮€杩欎釜锛岃兘鐪嬪埌鍘熷XML鏁版嵁娴?/span>

鈿狅笍 鈥?strong>鈥嬭嚧鍛界棝鐐光€?/strong>鈥嬶細瑙f瀽鍝嶅簲鏁版嵁寰楀儚鑰冨彜瀛﹀涓€鏍锋墥鎷塜ML鑺傜偣锛岃鏄亣鍒板灞傚祵濂楃粨鏋?..寤鸿澶囧ソ閫熸晥鏁戝績涓革紙鍒棶鎴戞槸鎬庝箞鐭ラ亾鐨勶級


鏂规浜岋細OkHttp+鎵嬪姩瑙f瀽缁勫悎鎷?/h3>

馃敟 鈥?strong>鈥嬫帹鑽愭寚鏁扳€?/strong>鈥嬶細鈽呪槄鈽呪槄鈽嗭紙閫傚悎鎯宠嚜宸辨帉鎺у叏灞€鐨勫己杩棁鎮h€咃級

鐜板湪寰堝鏂伴」鐩兘鐢≧ESTful鎺ュ彛浜嗘槸鍚э紵浣嗘€绘湁鐢叉柟鐖哥埜鍧氭寔瑕佺敤WebService銆傝繖鏃跺€橭kHttp杩欎釜缃戠粶搴撴墰鎶婂瓙灏辨淳涓婄敤鍦轰簡锛?/p>

  1. 鍏堝噯澶囧ソ姝﹀櫒搴擄細
gradle澶嶅埗
implementation 'com.squareup.okhttp3:okhttp:4.9.3'
  1. 鎵嬪姩鏋勯€燬OAP淇″皝锛堝锛屽氨鏄偅涓湅鐫€鍍忚9鑴氬竷鐨刋ML锛夛細
java澶嶅埗
String soapEnvelope = "" //杩欓噷寤鸿鐢⊿tringBuffer鎷兼帴
   + ""
   + ""+city+"";
  1. 鍙戦€佽姹傛椂娉ㄦ剰杩欎釜header闄烽槺锛?/li>
java澶嶅埗
Request request = new Request.Builder()
   .url("http://xxx.asmx")
   .addHeader("Content-Type", "text/xml; charset=utf-8") //婕忎簡杩欎釜鐩存帴404
   .post(RequestBody.create(soapEnvelope, MediaType.parse("text/xml")))
   .build();

馃挕 鈥?strong>鈥嬮伩鍧戞寚鍗椻€?/strong>鈥嬶細寤鸿鎶奨ML妯℃澘鍋氭垚璧勬簮鏂囦欢锛屽埆鍦ㄤ唬鐮侀噷纭紪鐮侊紙鍒棶鎴戞€庝箞鎬荤粨鍑烘潵鐨勶紝閮芥槸琛€娉彶锛?/p>


鏂规涓夛細Retrofit榄旀敼澶ф硶

馃殌 鈥?strong>鈥嬬湡棣欒鍛娾€?/strong>鈥嬶細鐢ㄨ繃鍚庡啀涔熷洖涓嶅幓鐨勭幇浠f柟妗?/p>

鎴戠煡閬撲綘鍦ㄦ兂鈥斺€擱etrofit涓嶆槸涓撻棬鎼濺EST鐨勫悧锛熸病閿欙紒浣嗗挶鍙互榄旀敼Converter璁╁畠鍏煎WebService銆傝繖涓柟妗堥€傚悎杩芥眰寮€鍙戞晥鐜囩殑鑱槑浜猴細

  1. 鍏堝紩鍏ラ粦绉戞妧渚濊禆锛?/li>
gradle澶嶅埗
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-simplexml:2.9.0' 
  1. 瀹氫箟鎺ュ彛鏃跺緱杩欐牱鐜╋細
java澶嶅埗
public interface WeatherService {
   @POST("/WebService.asmx")
   @Headers({"Content-Type: text/xml"})
   Call getWeather(@Body RequestBody body);
}
  1. 璇锋眰浣撴瀯閫犵敤杩欎釜楠氭搷浣滐細
java澶嶅埗
String envelope = "..."; //鍜屾柟妗堜簩绫讳技鐨凷OAP淇″皝
RequestBody body = RequestBody.create(envelope, MediaType.get("text/xml"));

鉁?鈥?strong>鈥嬬濂囦箣澶勨€?/strong>鈥嬶細閰嶅悎RxJava杩樿兘瀹炵幇娴佸紡缂栫▼锛屽紓姝ュ洖璋冨啀涔熶笉鐢ㄥ啓鍦扮嫳宓屽浜嗭紒


鐏甸瓊鎷烽棶鐜妭

鈥?strong>鈥婹锛氳繖涓夌鏂规鎬庝箞閫夛紵鏄笉鏄秺鏂扮殑瓒婂ソ锛熲€?/strong>鈥?br/> A锛氬ぇ閿欑壒閿欙紒瑕佹槸缁存姢鑰侀」鐩紝KSOAP2鍙兘鏄敮涓€閫夋嫨锛涙兂鍋氬簳灞傛帶鍒跺氨閫塐kHttp锛涙兂蹇€熷紑鍙戜笂鏂伴」鐩閫塕etrofit銆備妇涓牀瀛愶紝鍘诲勾鎴戜滑鍥㈤槦鎺ユ墜鏀垮簻椤圭洰锛岀敤鐨勮繕鏄?NET鍐欑殑WebService锛屾渶鍚庣敤鏂规浜岀‖鏄墰浣忎簡姣忓ぉ50涓囨鐨勮姹傞噺銆?/p>

鈥?strong>鈥婹锛氫负浠€涔堟垜鐨勮姹傛€绘槸鎶?04閿欒锛熲€?/strong>鈥?br/> A锛氭鏌ヤ笁澶勨€斺€?) 绔偣URL鏈夋病鏈夊绌烘牸 2) SOAPAction澶存槸鍚︽纭?3) 鍛藉悕绌洪棿鏄笉鏄拰鏈嶅姟绔竴鑷达紙杩欎釜鍧戞垜鏍借繃涓夋锛侊級


灏忕紪瑙傜偣

瀹炴祴鏁版嵁璇磋瘽锛氬湪2024骞村紑鍙戣€呰皟鐮斾腑锛屼娇鐢≧etrofit鏂规鐨勯」鐩钩鍧囧紑鍙戞晥鐜囨彁鍗?0%锛屼絾鍒濇湡瀛︿範鎴愭湰纭疄杈冮珮銆備釜浜哄缓璁柊鎵嬪厛鍚冮€忔柟妗堜簩锛岀瓑鐔熸倝WebService鐨勯€氫俊鏈哄埗鍚庡啀涓奟etrofit銆傝浣忥紝娌℃湁鏈€濂界殑鏂规锛屽彧鏈夋渶閫傚悎褰撳墠椤圭洰鐨勯€夋嫨鈥斺€斿氨鍍忔壘瀵硅薄锛屽悎閫傛瘮浼樼鏇撮噸瑕侊紒锛堢獊鐒跺摬瀛︽槸鎬庝箞鍥炰簨锛?/p>

本文由嘻道妙招独家原创,未经允许,严禁转载