- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我刚刚将我们的项目升级为使用 Roboguice 3,突然之间所有注入(inject)的对象都变为空,包括 POJO、提供者、 View 、资源等。我正在努力找出原因。
首先是 gradle 构建文件,尝试打开和关闭 Proguard,但没有任何区别。我相信我们目前使用的是 Roboguice 3.0.1,但我尝试了 3.0,但仍然有问题。
compile ('org.roboguice:roboguice:3.+') {
exclude module: 'asm'
}
provided 'org.roboguice:roboblender:3.+
而且我们在模块文件中确实有一些自定义绑定(bind),所以这里是我根据 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,一切正常。
我还尝试过其他一些事情:
RoboGuice.setUseAnnotationDatabases(false);
这没有什么不同。Ln.d("Test" + Strings.toString(0));
这个日志打印得很好,所以我认为实际的库打包正确。RoboGuice.getInjector(this).getInstance(SharedPreferencesHelper.class);
并抛出关于 Could not find a suitable constructor in some.path.SharedPreferencesHelper. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.
的错误奇怪的是,在 SharedPreferencesHelper 类中,我们确实有一个带有 @Inject
的公共(public)构造函数。注释,我想不知何故它没有被考虑在内?也许这整个问题是由于未考虑注释造成的?几天来我一直在努力解决这个问题,非常感谢任何输入或更多尝试。
最佳答案
将此添加到应用程序类将解决眼前的问题。如果添加到默认启动 Activity ,它也应该可以工作。
static {
RoboGuice.setUseAnnotationDatabases(false);
}
AnnotationDatabaseImpl 类由 Roboblender 在编译时生成。
让注释数据库工作:
编译器参数“guiceAnnotationDatabasePackageName”决定将生成的 AnnoationsDatabaseImpl 类分配给哪个包。
对于 Maven 构建:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler.version}</version>
<configuration>
<compilerArgument>-AguiceAnnotationDatabasePackageName=some.package.name.here</compilerArgument>
<source>${java.version}</source>
<target>${java.version}</target>
<fork>true</fork>
</configuration>
然后在应用程序 list 中,在应用程序元素内添加一个引用生成的类的元数据标记。
<meta-data android:name="roboguice.annotations.packages" android:value="some.package.name.here"/>
如果您进行了这些更改并且正在使用 intellij,那么重新导入您的 Maven pom 将应用这些更改。或者,在 Intellij 中,您可以分配编译器参数以获取要创建的注释。
这将在设置/构建、执行、部署/Java 编译器中的附加命令行参数下进行
-AguiceAnnotationDatabasePackageName=some.package.name.here
希望这对您有所帮助并减轻您的痛苦:)
关于java - 升级到 Roboguice 3 后注入(inject)的对象变为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27367525/
我创建了一个依赖于 ContentResolver 的类: public class MyClass { // these Injects won't work @Inject
这是我的 build.gradle 文件: buildscript { repositories { jcenter() } dependencies {
我正在尝试使用 android-quickstart 原型(prototype)创建一个 Android 基础项目,并添加 RoboGuice、ActionBarSherlock 依赖项以及 Robo
当我启动我的 RoboGuice android 应用程序时,以下消息出现在日志中: roboguice.RoboGuice﹕ Using full reflection. Try using Rob
这并不总是可见,但在特定的 API 14 和 19 上可见。 下面是堆栈跟踪 java.lang.NoClassDefFoundError: roboguice.inject.ContextScope
刚接触 roboguice,我喜欢它! 我有很多方法依赖于 DB 和 LocationManger 等,因此当我测试它们时,它使用真实的对象,我想模拟这些对象,这样当我测试时我就不必依赖在任何事情上。
我一直在查看 RoboGuice 2 的 astroboy 示例代码和文档,我真的很难过。我希望你们都可以帮助我尝试一些事情。这里的目标是测试模块以确保它正在加载并且 IoC 正在工作/连接。 我有一
这很奇怪。我在最近的所有具有相同库的项目中都使用了 Roboguice 2.0,一切似乎都很好。我开始了全新的项目,但在我的应用程序启动时,(...) 出现了一些令人毛骨悚然的错误。我到处搜索,从 S
我使用 Roboguice 1.1.2 和 guice-no-aop 2.0。我尝试使用辅助注入(inject),这需要 @Assisted 注释。我的问题是 guice-2.0-no_aop.jar
最近我下载了 Roboguice 并尝试了一下。总的来说我喜欢它,我认为它可以简化 Android 开发过程中的某些方面,但我遇到了一个尚未找到解决方案的情况:我想注入(inject)一个类,但该类有
我刚刚开始使用适用于 Android 的 Roboguice。尝试实现 this简单的上下文注入(inject)但出现此异常。我用谷歌搜索并遇到了很多帖子,但没有解决我的问题。这是下面的异常(exce
如何在自定义模块中获取应用程序上下文?这是我的模块的代码: public class MyModule extends AbstractModule { @Override @Supp
我正在使用 RoboGuice Providers 来注入(inject)自定义依赖项。我有两个提供商,第一个提供 Facebook AccessToken,第二个提供一个需要访问 token 的 F
我使用 Gradle 添加依赖项 org.roboguice:roboguice:3.0b-experimental到我的项目。 我找到了一个 post on the issue tracker ,说
我刚开始使用 Roboguice (+Guice),我不确定如何使用它的最佳实践。 在我的 Activity 中,我有大约 5 个函数(大约 30 个函数)使用一个名为“ProviderQueries
我正在尝试将 RoboGuice 作为依赖项安装到我的 Android Studio 项目中。一旦我尝试运行该项目(甚至在我添加任何新代码之前),我就会崩溃并显示以下输出: 信息:Gradle 任务
我在应用程序中打开了 proguard 我在应用程序 onCreate 中有一个警告 RoboGuice.injectMembers(_appContext, this); 异常: nalizable
我正在尝试在我的 Android 应用程序中使用 @InjectViews 但这似乎不起作用。这是它的代码。我已将库和 jar 包含到我的 android 应用程序中,并直接从 RoboActivit
我正在探索 RoboGuice 的世界,并且更改了一个 map Activity ,现在可以使用它了。它是一个 RoboMapActivity,我已经将应用程序的扩展名更改为从 RoboActivit
我第一次在项目中使用 RoboGuice,我试图注入(inject)一个静态变量,但该变量仍为空。这是我正在测试的东西的快速模型: public class MyActivity extends Ro
我是一名优秀的程序员,十分优秀!