Articles of roboguice

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

我刚刚升级了我们的项目以使用Roboguice 3,突然之间所有注入的对象都变为空,包括POJO,提供者,视图,资源等等。我正在努力弄清楚原因。 首先是gradle构建文件,打开和关闭Proguard并没有什么区别。 我相信我们目前正在使用Roboguice 3.0.1,但我尝试了3.0并仍然遇到了问题。 compile (‘org.roboguice:roboguice:3.+’) { exclude module: ‘asm’ } provided ‘org.roboguice:roboblender:3.+ 我们在模块文件中有一些自定义绑定,所以这是我如何根据维基指定它: 只是为了记录我还尝试在这样的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 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 […]

RoboGuice 3.0 NoClassDefFoundError:AnnotationDatabaseImpl

由于某种原因,RoboBlender不会生成注释数据库。 我的build.gradle具有以下依赖项: dependencies { provided ‘org.roboguice:roboblender:3.0’ compile fileTree(dir: ‘libs’, include: [‘*.jar’]) compile ‘org.roboguice:roboguice:3.0’ }

何时注入@InjectView字段?

究竟何时注入@InjectView或@InjectResource注释的Activity的字段?

Android:如何使用RoboActivity + ActionBarActivity扩展我的Activity类

我想在我的活动中使用RoboActivity,但我不知道如何做到这一点因为我当前的活动已经扩展到ActionBarActivity: public class MainActivity extends ActionBarActivity 非常感谢

roboguice如何注入自定义类

我现在正在使用roboguice,我们可以使用注释来获取类注入 @InjectView(R.id.list)ListView x @inject表示法有效,因为我从RoboActivity或任何Robo类扩展 我的问题是,如果我想注入一个自定义类,称为 public class CustomUtilManager { } 我希望能够在RoboActivity中注入它 @Inject CustomUtilMananger 我该怎么做? 我的第二个问题是,如果我有一个类,那么它不是任何Robo *类的子类 说 public class MyOwnClass { } 我如何获得注入器并注入另一个注入类,例如CustomUtilManager 即我怎么说 public class MyOwnClass { @Inject CustomUtilManager customUtilManager; }

用Jackson反序列化genericstypes

我正在努力创建一个使用Jackson来反序列化POJO的课程。 看起来像这样…… public class DeserialiserImp implements Deserialiser { protected ObjectMapper objectMapper = new ObjectMapper(); @Override public T get(String content, Class clazz) throws IOException { return (T) objectMapper.readValue(content, clazz); } @Override public List getList(String content, Class clazz) throws IOException { return objectMapper.readValue(content, TypeFactory.collectionType(ArrayList.class, clazz)); } } 我有2个关于此实现的问题。 第一个是我将类types传递给方法,因此objectmapper知道应该反序列化的types。 使用generics有更好的方法吗? 同样在get方法中,我将一个从objectMapper返回的对象转换为T.这似乎是特别讨厌的方式,因为我必须在这里强制转换T然后我还必须从调用它的方法中转换对象types。 我在这个项目中使用Roboguice,如果我可以通过注入更改types然后注释我需要它返回的Generictypes的对象,那将会很好。 我读到了关于TypeLiteral并想知道它是否可以解决这个问题?

带有@Inject注释的ProGuard和RoboGuice问题

我在优化我的Android应用程序时遇到了一些proguard问题。 似乎对注释类(@ com.google.inject.Inject)做了一些事情,Dalvik / Harmony在运行时不满意。 java.lang.annotation.IncompleteAnnotationException:注释com.google.inject.Inject的元素可选元素不完整 com.google.inject.Inject看起来像这样(Guice的一部分): @Target(value={ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD}) @Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) @Documented public abstract @interface com.google.inject.Inject extends Annotation { public abstract boolean optional() default false; } 这是发布失败: 04-07 09:48:00.864: ERROR/AndroidRuntime(9384): FATAL EXCEPTION: main 04-07 09:48:00.864: ERROR/AndroidRuntime(9384): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bitgrind.wtb/com.bitgrind.wtb.activity.Main}: com.google.inject.bq: com.google.inject.bq: java.lang.annotation.IncompleteAnnotationException: The element optional is not complete for the annotation com.google.inject.Inject […]

使用RoboGuice 2.0的Android应用程序 – 如何使用Application上下文注入Singleton

我有一个GameStateManager单例,我想让我的所有活动都可用。 特别是我希望它使用Application Context而不是单独的Activity Context来监听使用EventManager触发的事件。 GameStateManager标有单例注释 我试着在Application.OnCreate期间注入GameStateManager(抱歉,从内存中输入以下代码片段,没有复制和粘贴,所以可能不正确) public void OnCreate(){ GameStateManager gameStateManager = RoboGuice.InjectMembers(this.getApplicationContext(), new GameStateManager()) } 我认为GameStateManager的实例将使用应用程序上下文构造,因为它被注释为单例,因此稍后可以使用应用程序上下文。 我注意到的是,当我将GameStateManager注入到一个活动中时,我实际上得到了一个与活动上下文相关联的新单例。 所以本质上我有2个单身:) 关于如何拥有一个连接到Application上下文的真正“单例”的任何想法? 谢谢!

将RoboFragment与FragmentManager一起使用

我一直在尝试使用RoboGuice和碎片而没有运气。 我有一个扩展RoboFragment的片段,以及一个扩展RoboFragment的活动,但似乎在RoboActivity ,方法getFragmentManager与RoboFragment不兼容。 看起来RoboFragment扩展了android.support.v4.app.Fragmentment但getFragmentManager需要android.app.Fragment 。 这有什么用?

具有Roboguice依赖性的Gradle和多个项目

我正在尝试迁移旧的IntelliJ项目以使用gradle。 但是,在dx步骤期间,assembleDebug失败: java.lang.IllegalArgumentException: already added: Lcom/google/inject/AbstractModule; at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123) at com.android.dx.dex.file.DexFile.add(DexFile.java:163) at com.android.dx.command.dexer.Main.processClass(Main.java:490) at com.android.dx.command.dexer.Main.processFileBytes(Main.java:459) at com.android.dx.command.dexer.Main.access$400(Main.java:67) at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:398) at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245) at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131) at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109) at com.android.dx.command.dexer.Main.processOne(Main.java:422) at com.android.dx.command.dexer.Main.processAllFiles(Main.java:333) at com.android.dx.command.dexer.Main.run(Main.java:209) at com.android.dx.command.dexer.Main.main(Main.java:174) at com.android.dx.command.Main.main(Main.java:91) 我的项目分为两个子项目:主项目和图书馆项目。 这两个项目都将Roboguice和Guice作为依赖项。 我尝试了Xav建议的解决方法,将支持库包含在本答案中提到的多个项目中。 鉴于roboguice / guice都是从maven中心拾取的,因此甚至可能不需要解决方法。 我创建了一个虚拟库项目,这是唯一依赖roboguice / guice的项目。 我做到了这一点,以便我的主项目和(真正的)图书馆项目都依赖于这个虚拟项目。 但是,我得到了同样的错误。 怎么解决这个问题? 根目录中的settings.gradle : include ‘MainApp’ include ‘library’ include ‘common-library’ 根目录中的build.gradle […]