当前位置: 首页 > 知识库问答 >
问题:

在Android 4.2.2上,RetrofitError响应为空

郑声
2023-03-14

我正在我的Android项目中使用Retrofit库。我有一个rest服务器,试图请求它的登录方法。如果登录失败,服务器将返回401错误和json中的详细消息。我的问题是,在我的Nexus 5和Android 5.0上,它工作得很好,我可以从RetrofitError对象获取响应体。但在其他设备上,例如带有Android 4.2.2的Sony Xperia M,在同一请求中,我得到了未发现身份验证挑战异常和RetrofitError。响应对象为空。有什么想法吗?

更新

这是我的代码。我也用Robospice库。

这是一个接口:

@POST("/auth")
User logIn(@Body UserSignUp userSignUp);

这是我的机器人间谍请求类

public class UserLoginRequest extends RetrofitSpiceRequest<User, Server> {

private UserSignUp userSignUp;

public UserLoginRequest(UserSignUp userSignUp) {
    super(User.class, Server.class);
    this.userSignUp = userSignUp;
}

@Override
public User loadDataFromNetwork() throws Exception {
    return getService().logIn(userSignUp);
}
}

这是我的请求监听器:

public final class UserLoginListener implements RequestListener<User> {

    @Override
    public void onRequestFailure(SpiceException spiceException) {
        if (spiceException.getCause() != null && ((RetrofitError) spiceException.getCause()).getBody() != null) {
            Toast.makeText(LoginActivity.this, ((ResponseDto) (((RetrofitError) spiceException.getCause()).getBody())).error, Toast.LENGTH_LONG).show(); //On Nexus 5 with Android 5 this line works fine
        } else {
            Toast.makeText(LoginActivity.this, "Login failed", Toast.LENGTH_SHORT).show(); //On other devices I'm getting to this
        }
    }

    @Override
    public void onRequestSuccess(User user) {
        //Some code here
    }
}

UserResponseToclass的子类ResponseTo类只有一个名为error的公共字符串字段。

共有1个答案

司空俊雄
2023-03-14

似乎此异常与版本相关 - 这是由 HttpURL 连接引发的 IO 异常。尝试更改服务器的行为或在改造中处理 IOException。

未发现身份验证挑战

发生此错误是因为服务器发送了401(未经授权)但没有提供WWW-Authenticate标头,这是对客户端下一步操作的提示。

看看这里

 类似资料:
  • 我的后端是spring,前端是Angular。我无法访问授权标头。在postman中,如果我ping localhost:8080/login具有正确的数据,我就会获得成功授权,但是在我的应用程序中,当我尝试用httpclient localhost:8080/login发布具有正确的数据时,我会获得成功响应,但是头中没有标记,头是空的。

  • 在SoapUI Pro中使用XmlParser的问题 您好,我正在尝试使用“xml解析器”在SoapUI Pro中验证我的xml响应。 我一直在一个groovy脚本中玩这个,如果我像这样在groovy脚本中声明和分配我的xml,我可以访问标签 如果我在脚本中声明xml,这会起作用。。 但是当我从我的Soap响应中实例化xmlParser变量时,它似乎在正在运行的测试实例中不起作用,如下所示。 我知

  • 我的项目中有一个非常简单的SpringWebFlux restendpoint。 endpoint只需使用提供的用户名回复即可。 我面临的问题是响应体是空的,应该是用户名,我还验证了当我返回硬编码字符串时,它通过了,当我依赖

  • 我在Bootstrap工作室工作,似乎无法修复这个愚蠢的问题。 我看到每个人都建议我将meta name=“viewport”content=“initial-scale=1.0,maximum-scale=1.0”添加到中,但不幸的是,我无法编辑这部分代码,因为它锁定在BootStrap studio中。 但我确实在我的代码中看到了这一点: 。.. 有没有什么方法可以在不导出的情况下删除Boot

  • 我有一个用Java编写的Spring Boot应用程序,它是一个REST API。该服务(Svc A)调用REST API服务(Svc B),该服务也是用Java编写的Spring Boot应用程序。当没有找到数据时,Svc B返回404状态码。我需要将此响应更改为200状态代码,并返回一个空响应对象。我不确定是否或如何做到这一点。 我可以捕捉错误,并确定404是否是这个没有数据发现的错误。但是,

  • 我的环境: Shop RestController:Spring Boot 在localhost laptopn ubuntu 18:04 在localhost desktop pc windows 10上 邮递员要求: Spring引导控制器: 我已经尝试使用Observable和any以及HttpHeaders和Application/JSON,但响应相同。