Android平台呼叫WebService詳解

2021-06-27 22:10:43 字數 2992 閱讀 4666

部落格出處:

/** 

* 手機號段歸屬地查詢

* * @param phonesec 手機號段

*/

public void getremoteinfo(string phonesec) catch (exception e)

// 獲取返回的資料

soapobject object = (soapobject) envelope.bodyin;

// 獲取返回的結果

string result = object.getproperty(0).tostring();

// 將webservice返回的結果顯示在textview中

resultview.settext(result);

} }

注意點1:

如**中的62-69行所示,呼叫web service之前你需要先弄清楚這4個的值分別是什麼:命名空間、呼叫的方法名稱、endpoint和soap action。當在瀏覽器中訪問wsdl時,很容易得知命名空間、呼叫的方法名稱是什麼(不明白的請看上篇文章),至於endpoint通常是將wsdl位址末尾的"?wsdl"去除後剩餘的部分;而soap action通常為命名空間 + 呼叫的方法名稱。

注意點2:

75-76行是設定呼叫webservice介面方法需要傳入的引數。(在wsdl中能夠看到呼叫方法需要傳入的引數個數及引數名稱,在設定引數時最好指明每乙個傳入引數的名稱,如本例中的mobilecode、userid。網上有些資料說在需要

傳入多個引數時,只要多個引數的順序與wsdl中引數出現的順序一致即可,名稱並不需要和wsdl中的一致,但實際測試發現,大多數情況下並不可行!)

例如下面圖版上顯示的wsdl片段,呼叫該web service的checkuserinfo方法就需要傳入4個引數,引數名稱分別為:in0、in1、in2和in3。

注意點3

也許你會對第100行**產生疑惑,為什麼要用object.getproperty("getmobilecodeinforesult")來取得呼叫結果?那是因為wsdl中明確告訴了返回結果是string陣列,它的名稱為getdatabaseinforesult,wsdl中的描述如下:

<

s:element

minoccurs

="0"

maxoccurs

="1"

name

="getdatabaseinforesult"

type

="tns:arrayofstring"

/>

本例中呼叫webservice後返回的結果如下所示:

xml version="1.0" encoding="utf-8"

?>

<

string

xmlns

="">

1398547:貴州 貴陽 貴州移動黔中游卡

string

>

咦,這裡明明返回的是xml格式的內容,為什麼我們不需要通過解析xml來獲取我們需要的內容呢?其實如果你仔細看**中的96-97行並不難發現:

// 獲取返回的資料

soapobject object = (soapobject) envelope.bodyin;

ksoap2能夠將返回的xml轉換成soapobject物件,然後我們就可以通過操作物件的方式來獲取需要的資料了。

注意點4

同樣還是第100行**。從有些wsdl中我們並不能得知返回結果的名稱(如本例中的getmobilecodeinforesult),那又該如何呼叫呢?其實上面已經暗示了這個問題:當通過第97行**獲取返回結果並將其轉換成soapobject物件後,如果你並不知道通過該物件的哪個屬性來取值,你完全可以呼叫物件的tostring()方法來檢視返回的內容,例如將本例中的第100行**替換成:

// 獲取返回的結果

string result = object.tostring();

這樣得到的返回結果為:

注意看括號{}裡面的內容是乙個鍵-值對形式,以等號=分隔,我們正是通過=號左邊的「getmobilecodeinforesult」來獲取右邊的查詢結果。

其實在不知道返回結果名稱時(如本例的100行,我們並不知道返回結果中有屬性getmobilecodeinforesult),有一種更為簡便的方法,直接通過索引下標來獲取屬性值,也就是將第100行**替換為:

string result = object.getproperty(0).tostring();

注意點5:本例中只返回了乙個值,但有些webservice會返回多個值該怎麼獲取?獲取方法與本例完全一樣,只是需要注意的是如果是返回多個值,通過第100**object.getproperty(0);得到的可能仍然是乙個soapobject。不斷地呼叫getproperty()方法;總能得到你想要的全部結果。

注意點6:在呼叫某些webservice時,可能會報一些異常,但你又發現除了呼叫的webservice不同之外,其它地方的寫法和我的完全一樣,這又該如何解決呢?嘗試改變第79**中soap的版本號,可以分別嘗試使用soapenvelope.ver10、soapenvelope.ver11、soapenvelope.ver12這樣三個值。另外,在呼叫某些webservice時,可能在第91行**中,呼叫webservice時並不需要傳入soapaction,將其置為null即可。

4)在androidmanifest.xml中配置新增訪問網路的許可權

(千萬別忘記!!!)

android呼叫平台功能

一些例子是從網上找的,他有點像j2me的platformrequest,能呼叫手機平台的一些如sms,瀏覽器,mms,tel等功能 顯示網頁 uri uri uri.parse intent it new intent intent.action view,uri startactivity it ...

android平台除錯

1.gdbserver 位置 ndk dir prebuilt android arm gdbserver 2.gdb 位置 ndk dir toolchains arm linux androideabi 4.8 prebuilt windows x86 64 bin arm linux andr...

React Native呼叫Android介面

由於工作需要近期研究了下react native呼叫android介面,該文章將介紹自己在rn環境搭建和封裝第三方sdk介面以及rn呼叫android介面的趟坑過程。第一次寫部落格,寫的不好請大家勿噴 1 rn環境搭建 rn環境搭建有些繁瑣,但是按照官網文章一步一步操作完成是沒有太大問題的。2 嵌入...