客户端与服务台交互过程(登录为例):首先,客户端创建一个服务类的方法对象,传递过去两个值(username、password),然后执行相应的方法,并以getReault()方式进行json传值,其中会传递三个值(接口地址,接口名称,map),然后传递到getResult()方法里面去,进行执行exectue(url,method,parameter);到达exectue()方法里面去,同样带 有三个参数,继续执行:调用服务器接口NewDoNetUtil.exectue(url,method,parameter);到达服务器接口类execute();进行执行操作,返回SoapObject requests对象(返回值都是由status,Data)两个值(一个是返回码,另一个是boolean判断),然后原路传递给上一层,直到exectue()的时候(status值会与本地定义的返回码进行校验,不成功直接抛出异常)进行条件判断。当然,假如服务器返回的状态码与本地的成功码刚好相同,并且Data值也是完全符合条件的话,这个值将直接返回到页面进行下一步操作;反之,如果Data值不符合成功条件,并且status的状态码直接与异常码匹配成功的话,将抛出相应的异常到上一层,直至到页面,然后进行统一处理。
异常是在服务器接口类NewDoNetUtil.exectue(url,method,parameter);执行方法中,如果根本无法找到服务器的地址,然后直接往上抛出一个异常,这个异常就会明确的告诉我们,命名空间异常或者是连接超时。当然,还有一种情况就是没有在AndroidManifest.xml中添加网络权限,导致项目无法与服务器连接。否则,其他的异常可能都是在客户端与服务器交互过程中产生的异常,也会直接抛出,我们都定义一直往上面一层抛出,直到页面为止的时候再来进行全部处理。
处理异常的方法:首先,我们定义一个自定义的异常类(如下),然后在指定需要抛出异常的地方进行try{}catch(IOException e)throw new LbsException(errorCode);在方法参数后面加上:throws LbsException:表示该异常抛到上一层去。
/**
* 自定义异常
* @author lj029
*
*/
public class LbsException extends Exception
{
/**
* 注释内容
*/
private static final long serialVersionUID = -6555356073842721747L;
//错误码
private int errCode;
public LbsException(int errorCode)
{
errCode = errorCode;
}
public void setErrCode(int errCode)
{
this.errCode = errCode;
}
public int getErrCode()
{
return errCode;
}
@Override
public String toString()
{
return "errCode: " + errCode + super.toString();
}
/**
* 获取异常信息
* @param ctx
* @return [参数说明]
* @return String [返回类型说明]
* @exception throws [违例类型] [违例说明]
* @see [类、类#方法、类#成员]
*/
public String getErrorMessage(Context ctx)
{
if (null == ctx)
{
return null;
}
return ServerConstant.ReturnCode.getMsgByReturnCode(errCode, ctx);
}
}