2013-04-15 117 views
1

我正在開發一個使用SOAP web服務的android應用程序。在這個應用程序中,我需要檢查Web服務的連接性,因爲如果連接可用,我必須以聯機模式顯示數據,如果連接不可用,我必須以離線模式顯示數據,即。我正在使用SQLlite數據庫存儲來自web服務的數據如何檢查SOAP web服務連接

我的應用程序如何測試服務器的可用性,以控制應用程序是以聯機模式還是脫機模式運行?

+0

,我認爲它的熱鬧,你覺得有必要刪除水平線,但是你離開所有的語法錯誤,人稱代詞,數量分歧和漏字不變不正確的外殼。 –

+0

您是否在尋找代碼? – edwin

回答

0

對於這一點,我跟着這個方法

  1. 我創建了一個波戈功能(網絡法)在我的web服務(服務器),以檢查 連接

  2. 創建方法在客戶端調用Web方法。當我進入到應用程序的第一次,我從電話使用客戶端功能。然後等待response.The客戶端方法調用此方法,客戶端應該 通過的try-catch塊

  3. 如果任何異常包圍或超時發生的響應將爲空,並進入例外階段。因此 購買檢查響應。餘設置標誌(布爾或整型變量)上 響應(null或not null)決定離線或在線 模式

實施例與代碼的狀態的基礎

public class CallSOAP { 

private String SOAP_ACTION="your action url"; 
private String OPERATION_NAME="";//The web method OR web service you are going to call 
private final String WSDL_TARGET_NAMESPACE=SOAP_ACTION; 
private final String SOAP_ADDRESS=Configuration.WEB_SERVICE_URL;//ip-address of serever where you host your service 
private Exception exception; 
private String ErrorMsg=""; 
private String TERST_URL="" ; 
public Object call(String MethodeName,ArrayList<PropertyInfo> Parameters){ 
    this.OPERATION_NAME=MethodeName; 
    SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE, OPERATION_NAME); 
if(Parameters != null && Parameters.size()>0){ 
    for(PropertyInfo propertyInfo : Parameters){ 
     request.addProperty(propertyInfo); 
} 
} 

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
envelope.dotNet= true; 
envelope.setOutputSoapObject(request); 
HttpTransportSE httpTransport =null; 
if(!this.TERST_URL.equals("")) 
    httpTransport = new HttpTransportSE(this.TERST_URL); 
else 
    httpTransport = new HttpTransportSE(SOAP_ADDRESS); 
Object Response =null; 
try{ 
    httpTransport.call(SOAP_ACTION+OPERATION_NAME, envelope); 
    Response=envelope.getResponse(); 
    } 
catch (SocketTimeoutException ex) { 
    this.ErrorMsg="Unable to connect"; 
     Response=null; 
    this.exception=ex; 
    } 
    catch (IOException ie) { 
    this.ErrorMsg="Unable to connect"; 
    Response=null; 
    this.exception=ie; 
    } 
    catch (Exception e) { 
    this.ErrorMsg="Unable to connect"; 
    Response=null; 
    this.exception=e; 
} 
     return Response; 
    } 
} 

在代碼ErrorMsg="Unable to connect";顯示連接現在不可用。所以我設置響應爲空,你可以通過這個響應活動,並檢查它在那裏

參考this

+0

謝謝你對我有用..... – Hema

+0

現在我還有另外一個疑問,那就是如何執行從在線到離線的數據同步,反之亦然。假設我的應用程序處於離線模式,如果我在本地數據庫(Sqlite)上更新了某些內容,那麼當網絡連接到來時,反思Soap Webservice.What我可以爲這種情況做什麼? – Hema

+0

最好發表關於你的新疑問的另一個問題。如果這個問題可以幫助你解決你的問題,請投票我的答案,以便其他人可以有用 – edwin

0

在設計時,您可以將web瀏覽器指向web服務並檢查響應。它沒有得到迴應,或者沒有得到您的預期,您可以使用更多細節Fiddler

在運行時您可以簡單地嘗試訪問try/catch異常處理程序中的服務器。定義一個公共布爾IsOnline,在適當範圍內可見,並在成功執行後將其設置爲true,並在異常處理程序中將其設置爲false。自從我使用Java以來​​已有數十年的歷史了,但這與您在幾乎任何OO半程式語言(如C#或C++或Java或VB)中使用的方法相同。

+0

我不需要工具,而運行我的應用程序本身,我必須檢查與服務器的連接。 – Hema

+0

你能告訴我這個例子嗎? – Hema

+0

對不起,我的反應很慢。你接受的答案包含一個非常類似於我的建議的例子,除了我不打算創建一個pogo函數來調用,我把它放到異常處理程序中,你應該總是圍繞這些調用。 –