1

我正在使用 SOAP webservice 开发一个 android 应用程序。在这个应用程序中,我需要检查网络服务的连接性,因为如果连接可用,我必须以在线模式显示数据,如果连接不可用,我必须以离线模式显示数据,即。我正在使用 SQLlite 数据库来存储来自 web 服务的数据

我的应用程序如何测试服务器的可用性,以控制应用程序是在联机模式还是脱机模式下运行?

4

2 回答 2

0

在设计时,您可以将 Web 浏览器指向 Web 服务并检查响应。如果您没有得到响应,或者不是您所期望的,您可以使用Fiddler获取更多详细信息

在运行时,您可以简单地尝试在 try/catch 异常处理程序中访问服务器。在适当范围内可见的东西上定义一个公共 bool IsOnline,并在成功执行后将其设置为 true,并在异常处理程序中将其设置为 false。自从我使用 Java 以来已经有几十年了,但这与您在几乎任何 OO 半过程语言中使用的方法相同,例如 C#、C++ 或 Java 或就此而言的 VB。

于 2013-04-15T06:25:42.157 回答
0

为此,我遵循了这种方法

  1. 我在我的网络服务(服务器)中创建了一个Pogo 函数(网络方法)来检查连接性

  2. 在客户端创建一个方法来调用 web-method 。当我第一次进入应用程序时,我使用客户端功能从手机调用此客户端方法。然后等待响应。客户端方法应被try-catch块包围

  3. 如果发生任何异常或超时,响应将为空并进入异常阶段。所以购买检查响应。我根据响应状态(空或非空)设置一个标志(布尔或整数变量)来决定离线或在线模式

代码示例

    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";中显示连接现在不可用。所以我将响应设置为 null,您可以将此响应传递给活动并在那里检查

参考这个

于 2013-04-15T07:20:37.660 回答