我在Android上使用Robospice与Retrofit和OKHttp。所有工作都很好,使用Robospice RequestListener将响应传递回活动。问题是,如果连接超时或其他网络问题,它只会返回失败。如果返回401,那么它被归类为成功但具有空响应,因为它无法将JSON解析为我们的MobileAppSetup POJO。
目前我不得不对响应进行空检查,但我不知道如果是服务器错误或有效的401,原因是什么。
public final class HTTPRequestListener implements RequestListener<MobileAppSetup> {
@Override
public void onRequestFailure(SpiceException spiceException) {
Log.d("", "failure:"+ spiceException);
loginProgress.hide();
}
@Override
public void onRequestSuccess(final MobileAppSetup response) {
Log.d("","success. Data: "+response);
if(response==null)
showDialog("Error logging in", "Please check your username and password and try again.", "");
loginProgress.hide();
postLoginProcess(response);
}
}
我需要将这些错误传递给onRequestFailure回调,以便我能正确处理它。有没有办法指定Robospice应该视为错误的错误代码。我认为它涉及添加某种自定义错误处理程序,但目前还无法找到解决方案。
答案 0 :(得分:2)
这是由于OKHTTP客户端中的错误 possible bug !
问题是当服务器以401 Unauthorized响应回答时, Callback对象调用其failure()方法..
当服务器返回401状态时,
RetrofitError
response对象为null,networkError
标志设置为true, 使应用程序无法检查error.getResponse().getStatus()
我认为错误在于http 客户。使用 OkClient 时出现此错误:java.io.IOException: 未发现身份验证挑战
我建议您从square/okhttp下载新的okhttp jar文件再次运行该项目!或尝试与任何其他客户端而不是okhttp。