java – 升级到Roboguice 3后,注入的对象变为null

前端之家收集整理的这篇文章主要介绍了java – 升级到Roboguice 3后,注入的对象变为null前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我刚刚升级了我们的项目以使用Roboguice 3,突然间所有注入的对象都变为null,包括POJO,Providers,Views,Resources等.我正在努力弄清楚原因.

首先是gradle构建文件,试用Proguard开启和关闭它并没有什么区别.我相信我们目前正在使用Roboguice 3.0.1,但我尝试了3.0并仍然遇到了问题.

compile ('org.roboguice:roboguice:3.+') {
    exclude module: 'asm'
}
provided 'org.roboguice:roboblender:3.+

我们在模块文件中有一些自定义绑定,所以这是我如何根据wiki指定它:

<Meta-data
  android:name="roboguice.modules"
  android:value="com.some.CustomModule"/>

只是为了记录我还尝试在这样的Application类中指定它并且它不起作用:

RoboGuice.getOrCreateBaseApplicationInjector(
                    this,RoboGuice.DEFAULT_STAGE,RoboGuice.newDefaultRoboModule(this),new CustomModule(this));

这是关于它的设置,我们没有改变任何东西,如果我使用Roboguice 2,一切正常.

我还尝试了其他一些事情:

>还尝试了没有Roboblender和注释db RoboGuice.setUseAnnotationDatabases(false);它没有任何区别.
> Ln.d(“Test”Strings.toString(0));这个日志打印得很好所以我认为实际的库是正确打包的.
>我尝试使用像RoboGuice.getInjector(this).getInstance(SharedPreferencesHelper.class)这样的手动注入,而不是注入POJO的Provider.它会抛出一些错误,无法在some.path.SharedPreferencesHelper中找到合适的构造函数.类必须有一个(也是唯一一个)使用@Inject注释的构造函数或一个非私有的零参数构造函数.奇怪的是,在SharedPreferencesHelper类中,我们有一个@Inject注释的公共构造函数,我想不知何故它没有被考虑在内?也许整个问题是由于没有考虑注释?

我已经对它进行了几天的撞击,并且非常感谢任何输入或更多的东西尝试.

最佳答案
将其添加到应用程序类将解决当前的问题.如果添加到默认启动活动,它也应该有效.

static {
    RoboGuice.setUseAnnotationDatabases(false);
}

AnnotationDatabaseImpl类由Roboblender在编译时生成.

获取注释数据库的工作原理:

编译器参数“guiceAnnotationDatabasePackageName”决定生成的AnnoationsDatabaseImpl类分配给哪个包.

对于maven构建:

然后在应用程序清单中,在application元素内添加一个引用生成的类的元数据标记.

<Meta-data android:name="roboguice.annotations.packages" android:value="some.package.name.here"/>

如果您进行了这些更改并使用了intellij,那么重新导入Maven pom将应用这些更改.或者,在Intellij中,您可以分配编译器参数以获取要创建的注释.

这将在Settings / Build,Executions,Deployment / Java Compiler中的Additional命令行参数下进行

-AguiceAnnotationDatabasePackageName = some.package.name.here

希望这会有所帮助并为您节省一些悲伤:)

猜你在找的Android相关文章