gpt4 book ai didi

Android 注释不注入(inject) RestService

转载 作者:太空狗 更新时间:2023-10-29 14:59:21 25 4
gpt4 key购买 nike

您好,我无法在我的代码中的任何位置注入(inject) RestService。我正在测试驱动,所以我正在使用 Robolectric 来测试此代码。我希望这不是 AA+Robolectric 的问题,我对此没有任何经验。奇怪的是,在我的测试中,我可以手动插入生成的 RestClient_,但它不会自动插入。所以我可以这样做:

RestClient rest = new RestClient_(activity.getApplicationContext());

但以下不起作用:

@RestService
RestClient restClient;

我在 restClient 上收到 NullPointerException。

我也没有忘记@EBean 标签

@EBean
public class Player {
@RestService
RestClient restClient;

private int playerId;

public Player() {
}

public int getPlayerId() {
return playerId;
}

public List<Card> getHand() {
return restClient.getHand(playerId);
}
}

在日志中,我可以看到 Android Annotations 已正确处理所有内容。

这是我第一个使用 Android 注释的项目,我不明白为什么依赖注入(inject)不起作用。没有依赖项注入(inject)几乎消除了使用 Android 注解的所有好处。提前致谢!

一些额外信息:我正在 Android 注释注释的 REST 服务中实例化我的 Player 对象。创建 Player 对象的方法的代码 fragment 。

@Get(value = "/players/createAnonymous")
@Accept(MediaType.APPLICATION_JSON)
public Player createAnonymousPlayer();

最佳答案

好的,这就是我的问题的答案。我希望它能对其他和我一样问自己的人有用。感谢 WonderCsabo 为我指明了正确的方向。

Android Annotations 在编译时生成带注释的类。所以 Player 变成了 Player_。使用@Inject 时,Android Annotations 将在注释字段中注入(inject)一个Player_ 实例。但是在我的例子中,RestClient_ 将返回 Player 而不是 Player_(因此播放器对象没有经过处理的注释,所以没有注入(inject)的 RestClient_)。

不可能(据我所知)让 RestClient 返回 Player_。这不会编译,因为 Player_ 类在编译时尚不存在。

现在我也明白Android Annotations的缺点了。您无法轻松测试代码,因为您无法在测试中使用 android 注释。您不能在任何地方将测试类与生成的类交换。如果不使用运行时模拟生成器作为 PowerMock,您也无法模拟注入(inject)的类。所以如果你需要依赖注入(inject)和简单的测试,你应该去别处看看。 (以 Dagger 为例)

关于Android 注释不注入(inject) RestService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28418354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com