Android RoboGuice.getInjector引发异常

Android RoboGuice.getInjector引发异常,android,roboguice,Android,Roboguice,我试着在我的android项目中开始使用RoboGuice 2,它可以正常工作,除非我尝试使用它在活动中注入视图。如果我尝试从RoboActivity扩展我的活动,或者在onCreate方法中手动调用RoboGuice.getInjector(上下文),我会遇到以下异常: FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity}: com.google.inject.ConfigurationE

我试着在我的android项目中开始使用RoboGuice 2,它可以正常工作,除非我尝试使用它在活动中注入视图。如果我尝试从RoboActivity扩展我的活动,或者在onCreate方法中手动调用RoboGuice.getInjector(上下文),我会遇到以下异常:

FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity}: com.google.inject.ConfigurationException: Guice configuration errors:
    1) Could not find a suitable constructor in roboguice.inject.ContextScope. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.
            at roboguice.inject.ContextScope.class(Unknown Source)
    while locating roboguice.inject.ContextScope
    1 error
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
            at android.app.ActivityThread.access$700(ActivityThread.java:159)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:176)
            at android.app.ActivityThread.main(ActivityThread.java:5419)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: com.google.inject.ConfigurationException: Guice configuration errors:
    1) Could not find a suitable constructor in roboguice.inject.ContextScope. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.
            at roboguice.inject.ContextScope.class(Unknown Source)
    while locating roboguice.inject.ContextScope
    1 error
            at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1004)
            at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:961)
            at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1013)
            at roboguice.inject.ContextScopedRoboInjector.<init>(ContextScopedRoboInjector.java:27)
            at roboguice.RoboGuice.getInjector(RoboGuice.java:149)
            ...
致命异常:main
java.lang.RuntimeException:无法启动活动}:com.google.inject.ConfigurationException:GUI配置错误:
1) 在roboguice.inject.ContextScope中找不到合适的构造函数。类必须有一个(并且只有一个)用@Inject注释的构造函数,或者一个非私有的零参数构造函数。
位于roboguice.inject.ContextScope.class(未知源)
查找roboguice.inject.ContextScope时
1错误
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
在android.app.ActivityThread.access$700(ActivityThread.java:159)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:176)
位于android.app.ActivityThread.main(ActivityThread.java:5419)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:525)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
在dalvik.system.NativeStart.main(本机方法)
原因:com.google.inject.ConfigurationException:Guice配置错误:
1) 在roboguice.inject.ContextScope中找不到合适的构造函数。类必须有一个(并且只有一个)用@Inject注释的构造函数,或者一个非私有的零参数构造函数。
位于roboguice.inject.ContextScope.class(未知源)
查找roboguice.inject.ContextScope时
1错误
位于com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1004)
位于com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:961)
位于com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1013)
在roboguice.inject.ContextScopedRoboInjector。(ContextScopedRoboInjector.java:27)
位于roboguice.roboguice.getInjector(roboguice.java:149)
...
我使用maven使用以下依赖项将GUI添加到我的项目中

<dependency>
  <groupId>org.roboguice</groupId>
  <artifactId>roboguice</artifactId>
  <version>2.0</version>
</dependency>

org.roboguice
机器人向导
2

任何帮助都将不胜感激。

默认情况下,RoboGuice将尝试使用默认构造函数创建对象。您的对象似乎没有默认构造函数。 您可以通过以下方式解决此问题:

  • 注释要与
    @Inject
    一起使用的构造函数(并确保RoboGuice也可以创建该构造函数的所有参数)
  • 在尝试注入的对象中创建默认构造函数
  • 如果您无法控制要注入的对象,则可以在注入阶段使用提供程序来构造该对象

我发现,如果我只是扩展AbstractModule,那么正确配置它需要付出比绑定上下文更多的努力

我扩展了DefaultRoboModule,如javadoc中所述:

Injector injector =
    RoboGuice.setBaseApplicationInjector(
        this, Stage.PRODUCTION,
        Modules.override(RoboGuice.newDefaultRoboModule(this)).with(new MyModule())
    );
一切都按预期进行

无论如何,谢谢你