问题是这样的,android调用 AVOSCloud.verifySMSCode("短信里的6位验证码","11位手机号码")方法。随便输一个验证码,经常会出现{"code":603,"error":"\u65e0\u6548\u7684\u77ed\u4fe1\u9a8c\u8bc1\u7801"}
error:org.apache.http.client.HttpResponseException: Bad Request异常,但是AVException又捕获不到的情况。以下是我的代码片段和日志:
代码:
try {
AVOSCloud.verifySMSCode(smsCode, phone);
Log.i("verifySmsCodeSucc", "succ");
} catch (AVException e) {
Log.e("verifySmsCodeFail", "fail");
throw createExceptionWithCodeMessage(FUNC_VERIFY_SMS_CODE, e);
}
失败日志:
06-20 12:02:56.095 10342-10724/com.smallpay.max.app E/===AVOS Cloud===﹕ LogUtil$avlog->e->34: {"code":603,"error":"\u65e0\u6548\u7684\u77ed\u4fe1\u9a8c\u8bc1\u7801"}
error:org.apache.http.client.HttpResponseException: Bad Request
06-20 12:02:56.105 10342-10724/com.smallpay.max.app I/verifySmsCodeSucc﹕ succ
这种情况还有一个特殊性,就是我用debug模式单步跟的话有时候是能捕获到异常的,日志:
06-20 12:09:30.390 10342-11583/com.smallpay.max.app E/===AVOS Cloud===﹕ LogUtil$avlog->e->34: {"code":603,"error":"\u65e0\u6548\u7684\u77ed\u4fe1\u9a8c\u8bc1\u7801"}
error:org.apache.http.client.HttpResponseException: Bad Request
06-20 12:09:31.320 10342-11583/com.smallpay.max.app E/verifySmsCodeFail﹕ fail。
在非debug模式下,捕获不到异常的概率很大,尤其是我连续访问的时候,基本上都会出现捕获不到异常的情况,麻烦帮看一下,谢谢。

重设密码也存在这个问题:
try {
AVUser.resetPasswordBySmsCode(smsCode, password);
AVUser.logOut();
TLog.log("resetPasswordBySmsCodeSuccess");
} catch (AVException e) {
TLog.error("resetPasswordBySmsCodeFail");
throw createExceptionWithCodeMessage(FUNC_RESET_PASSWORD, e);
}
日志:
06-20 12:54:43.840 19395-19971/com.smallpay.max.app E/===AVOS Cloud===﹕ LogUtil$avlog->e->34: {"code":603,"error":"\u65e0\u6548\u7684\u77ed\u4fe1\u9a8c\u8bc1\u7801"}
error:org.apache.http.client.HttpResponseException: Bad Request
06-20 12:54:43.840 19395-19971/com.smallpay.max.app I/max_app﹕ resetPasswordBySmsCodeSuccess

首先建议使用 AVOSCloud 的 verifySMSCodeInBackgroud 方法,网络请求最好不要跑在主线程里。使用 verifySMSCodeInBackgroud 会采用回调的方式。
关于捕获不到异常,不知道是不是因为跑在了主线程的原因,我这边暂未复现

我本地已经有了异步,而且看你们的sdk中异步方法本质上调的也是同步的