调试改造错误消息的最佳方法

2022-09-02 19:40:53

我是改造的新手。我用过Volley,我有点喜欢Retrofit。我正要选择改造时,当我在尝试进行POST时遇到这个非常非描述性的错误消息时。

 Exception in thread "main" retrofit.RetrofitError
    at retrofit.RetrofitError.httpError(RetrofitError.java:37)
    at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:413)
    at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:282)
    at myapi.api.$Proxy7.logon(Unknown Source)
    at myapi.api.TestDriver.main(TestDriver.java:94)

好吧,我必须说,这种类型的错误消息与撒哈拉沙漠的保暖夹克一样有用。

有谁知道从哪里开始调试这种类型的消息?我真的不打算委托给一个不提供有用错误消息的REST API。


答案 1

为改造创建自定义。ErrorHandler

我发现捕获错误并没有提供大量额外的信息,但是为Retrofit创建自定义可以让我更深入地挖掘实际错误,如下所示:ErrorHandler

class MyErrorHandler implements ErrorHandler {
  @Override public Throwable handleError(RetrofitError cause) {
    Response r = cause.getResponse();
    if (r != null && r.getStatus() == 401) {
      return new UnauthorizedException(cause);
    }
    return cause;
  }
}

RestAdapter restAdapter = new RestAdapter.Builder()
    .setEndpoint("https://api.github.com")
    .setErrorHandler(new MyErrorHandler())
    .setLogLevel(RestAdapter.LogLevel.FULL)  // Do this for development too.
    .build();

“改造”页上的“自定义同步错误处理”部分。

将日志级别也设置为 FULL,如上面的配置代码所示。


答案 2

您可能希望向 中添加一个 catch 子句:TestDriver.main

try {
  service.logon();
} catch (RetrofitError e) {
  System.out.println(e.getResponse().getStatus());
}