【问题标题】:Roboguice crasshes app at launchRoboguice 在启动时使应用程序崩溃
【发布时间】:2014-05-06 22:08:58
【问题描述】:

这很奇怪。我最近在所有具有相同库的项目中都使用了 Roboguice 2.0,一切看起来都很好。我开始了全新的项目,在我的应用程序启动时出现了一些令人毛骨悚然的错误(...)。我到处搜索,从 SO 开始,但所有问题都与旧的或解决方案不起作用的这个错误相对应。

詹姆·兰尼斯特手上的金钉子,用来解决这场噩梦!

我使用 Android Studio 和库:

- guice-3.0-no_aop
- javax.inject-1
- jsr305-1.3.9
- roboguice-2.0
- in other modules there are Spring-for-android-REST and GreenDao libs, if it matters

类扩展应用:

public class JudgementSearcherApp extends Application {

    @Inject private InitAppCommand initApp;

    @Override
    public void onCreate() {
        super.onCreate();
        setup();
    }

    private void setup() {
        RoboGuice.setBaseApplicationInjector(this, RoboGuice.DEFAULT_STAGE,
                RoboGuice.newDefaultRoboModule(this), new JSGuiceModule());
        RoboGuice.injectMembers(this,this);

        initApp.execute(JudgementSearcherApp.this);
    }
}

错误:

com.rudearts.judgementsearcher E/AndroidRuntime: FATAL EXCEPTION: main java.lang.RuntimeException:无法创建应用程序 com.rudearts.judgementsearcher.JudgementSearcherApp:com.google.inject.CreationException:Guice 创建错误: 1) 注入构造函数时出错,java.lang.NullPointerException 在 com.rudearts.judgementsearcher.core.managers.LawCaseManager.(未知来源) 在 com.rudearts.judgementsearcher.core.managers.LawCaseManager.class(未知来源) 同时定位 com.rudearts.judgementsearcher.core.managers.LawCaseManager 对于 com.rudearts.judgementsearcher.controller.setup.commands.LoadLastUpdateDateCommand.lawCaseState 的字段(未知来源) 同时定位 com.rudearts.judgementsearcher.controller.setup.commands.LoadLastUpdateDateCommand 对于 com.rudearts.judgementsearcher.controller.setup.commands.InitAppCommand.loadDate 的字段(未知来源) 同时定位 com.rudearts.judgementsearcher.controller.setup.commands.InitAppCommand 对于 com.rudearts.judgementsearcher.JudgementSearcherApp.initApp 的字段(未知来源) 在 roboguice.config.DefaultRoboModule.configure(DefaultRoboModule.java:141) 在 roboguice.config.DefaultRoboModule.configure(DefaultRoboModule.java:141) 定位 android.app.Application 对于 roboguice.util.Ln$BaseConfig 中的参数 0。(未知来源) 同时定位 roboguice.util.Ln$BaseConfig 对于 roboguice.util.Ln.config 中的字段(未知来源) 1 个错误 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:3291) 在 android.app.ActivityThread.access$2200(ActivityThread.java:121) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:981) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:130) 在 android.app.ActivityThread.main(ActivityThread.java:3770) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:507) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670) 在 dalvik.system.NativeStart.main(本机方法) 引起:com.google.inject.CreationException:Guice 创建错误: 1) 注入构造函数时出错,java.lang.NullPointerException 在 com.rudearts.judgementsearcher.core.managers.LawCaseManager.(未知来源) 在 com.rudearts.judgementsearcher.core.managers.LawCaseManager.class(未知来源) 同时定位 com.rudearts.judgementsearcher.core.managers.LawCaseManager 对于 com.rudearts.judgementsearcher.controller.setup.commands.LoadLastUpdateDateCommand.lawCaseState 的字段(未知来源) 同时定位 com.rudearts.judgementsearcher.controller.setup.commands.LoadLastUpdateDateCommand 对于 com.rudearts.judgementsearcher.controller.setup.commands.InitAppCommand.loadDate 的字段(未知来源) 同时定位 com.rudearts.judgementsearcher.controller.setup.commands.InitAppCommand 对于 com.rudearts.judgementsearcher.JudgementSearcherApp.initApp 的字段(未知来源) 在 roboguice.config.DefaultRoboModule.configure(DefaultRoboModule.java:141) 在 roboguice.config.DefaultRoboModule.configure(DefaultRoboModule.java:141) 定位 android.app.Application 对于 roboguice.util.Ln$BaseConfig 中的参数 0。(未知来源) 同时定位 roboguice.util.Ln$BaseConfig 对于 roboguice.util.Ln.config 中的字段(未知来源) 1 个错误 在 com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:435) 在 com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:175) 在 com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:109) 在 com.google.inject.Guice.createInjector(Guice.java:95) 在 com.google.inject.Guice.createInjector(Guice.java:83) 在 roboguice.RoboGuice.setBaseApplicationInjector(RoboGuice.java:94) 在 com.rudearts.judgementsearcher.JudgementSearcherApp.setup(JudgementSearcherApp.java:26) 在 com.rudearts.judgementsearcher.JudgementSearcherApp.onCreate(JudgementSearcherA

【问题讨论】:

    标签: java android gradle guice roboguice


    【解决方案1】:

    好的,伙计们,我自己找到了。

    我在单例 LawCaseManager 中注入了 util 类,该类是在应用程序创建期间注入的。我搜索了一些注入循环/无限循环或竞争条件,但没有找到任何明显的。

    总而言之,当我在单例类中删除注入时,一切正常。我搜索了我的旧项目,似乎我只将单例用于数据管理器,它们保持着应用程序状态,并且没有一个注入任何其他类。我很好奇,如果只是特定情况还是某些大规则,guice 禁止在单例类中注入? :O

    【讨论】:

      猜你喜欢
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多