【问题标题】:Android Roboguice ExceptionAndroid Roboguice 异常
【发布时间】:2012-02-12 18:23:03
【问题描述】:

刚开始使用 Roboguice for android。 尝试实现this 简单的上下文注入,但得到了这个异常。 我用谷歌搜索了很多帖子,但没有解决我的问题。 这是下面的例外,有什么想法吗?

提前致谢

02-05 00:14:54.330: I/dalvikvm(777): Failed resolving Lcom/google/inject/Provider; interface 627 'Ljavax/inject/Provider;'
02-05 00:14:54.330: W/dalvikvm(777): Link of class 'Lcom/google/inject/Provider;' failed
02-05 00:14:54.340: I/dalvikvm(777): Failed resolving Lcom/google/inject/Provider; interface 627 'Ljavax/inject/Provider;'
02-05 00:14:54.340: W/dalvikvm(777): Link of class 'Lcom/google/inject/Provider;' failed
02-05 00:14:54.361: I/dalvikvm(777): Failed resolving Lcom/google/inject/Provider; interface 627 'Ljavax/inject/Provider;'
02-05 00:14:54.361: W/dalvikvm(777): Link of class 'Lcom/google/inject/Provider;' failed
02-05 00:14:54.361: W/dalvikvm(777): VFY: unable to find class referenced in signature (Lcom/google/inject/Provider;)
02-05 00:14:54.370: I/dalvikvm(777): Failed resolving Lcom/google/inject/Provider; interface 627 'Ljavax/inject/Provider;'
02-05 00:14:54.370: W/dalvikvm(777): Link of class 'Lcom/google/inject/Provider;' failed
02-05 00:14:54.370: W/dalvikvm(777): VFY: unable to find class referenced in signature (Lcom/google/inject/Provider;)
02-05 00:14:54.380: I/dalvikvm(777): Failed resolving Lcom/google/inject/Provider; interface 627 'Ljavax/inject/Provider;'
02-05 00:14:54.380: W/dalvikvm(777): Link of class 'Lcom/google/inject/Provider;' failed
02-05 00:14:54.401: I/dalvikvm(777): Failed resolving Lcom/google/inject/Provider; interface 627 'Ljavax/inject/Provider;'
02-05 00:14:54.401: W/dalvikvm(777): Link of class 'Lcom/google/inject/Provider;' failed
02-05 00:14:54.401: W/dalvikvm(777): VFY: unable to find class referenced in signature (Lcom/google/inject/Provider;)
02-05 00:14:54.430: I/dalvikvm(777): Failed resolving Lcom/google/inject/Provider; interface 627 'Ljavax/inject/Provider;'
02-05 00:14:54.430: W/dalvikvm(777): Link of class 'Lcom/google/inject/Provider;' failed
02-05 00:14:54.430: I/dalvikvm(777): Failed resolving Lroboguice/application/RoboApplication$1; interface 82 'Lcom/google/inject/Provider;'
02-05 00:14:54.430: W/dalvikvm(777): Link of class 'Lroboguice/application/RoboApplication$1;' failed
02-05 00:14:54.430: E/dalvikvm(777): Could not find class 'roboguice.application.RoboApplication$1', referenced from method roboguice.application.RoboApplication.initInstanceMembers
02-05 00:14:54.430: W/dalvikvm(777): VFY: unable to resolve new-instance 655 (Lroboguice/application/RoboApplication$1;) in Lroboguice/application/RoboApplication;
02-05 00:14:54.430: D/dalvikvm(777): VFY: replacing opcode 0x22 at 0x0007
02-05 00:14:54.451: D/dalvikvm(777): VFY: dead code 0x0009-006b in Lroboguice/application/RoboApplication;.initInstanceMembers ()V
02-05 00:14:54.481: I/dalvikvm(777): Could not find method com.google.inject.internal.Maps.newHashMap, referenced from method roboguice.inject.ContextScope.getScopedObjectMap
02-05 00:14:54.481: W/dalvikvm(777): VFY: unable to resolve static method 1165: Lcom/google/inject/internal/Maps;.newHashMap ()Ljava/util/HashMap;
02-05 00:14:54.491: D/dalvikvm(777): VFY: replacing opcode 0x71 at 0x0018
02-05 00:14:54.491: D/dalvikvm(777): VFY: dead code 0x001b-0020 in Lroboguice/inject/ContextScope;.getScopedObjectMap (Lcom/google/inject/Key;)Ljava/util/Map;
02-05 00:14:54.500: I/dalvikvm(777): Failed resolving Lcom/google/inject/Provider; interface 627 'Ljavax/inject/Provider;'
02-05 00:14:54.500: W/dalvikvm(777): Link of class 'Lcom/google/inject/Provider;' failed
02-05 00:14:54.500: W/dalvikvm(777): VFY: unable to find class referenced in signature (Lcom/google/inject/Provider;)
02-05 00:14:54.500: I/dalvikvm(777): Failed resolving Lcom/google/inject/Provider; interface 627 'Ljavax/inject/Provider;'
02-05 00:14:54.500: W/dalvikvm(777): Link of class 'Lcom/google/inject/Provider;' failed
02-05 00:14:54.500: I/dalvikvm(777): Failed resolving Lroboguice/inject/ContextScope$1; interface 82 'Lcom/google/inject/Provider;'
02-05 00:14:54.500: W/dalvikvm(777): Link of class 'Lroboguice/inject/ContextScope$1;' failed
02-05 00:14:54.510: E/dalvikvm(777): Could not find class 'roboguice.inject.ContextScope$1', referenced from method roboguice.inject.ContextScope.scope
02-05 00:14:54.510: W/dalvikvm(777): VFY: unable to resolve new-instance 672 (Lroboguice/inject/ContextScope$1;) in Lroboguice/inject/ContextScope;
02-05 00:14:54.510: D/dalvikvm(777): VFY: replacing opcode 0x22 at 0x0000
02-05 00:14:54.510: D/dalvikvm(777): VFY: dead code 0x0002-0005 in Lroboguice/inject/ContextScope;.scope (Lcom/google/inject/Key;Lcom/google/inject/Provider;)Lcom/google/inject/Provider;
02-05 00:14:54.571: E/dalvikvm(777): Could not find class 'javax.inject.Provider', referenced from method com.google.inject.internal.MoreTypes.canonicalizeForKey
02-05 00:14:54.571: W/dalvikvm(777): VFY: unable to resolve const-class 627 (Ljavax/inject/Provider;) in Lcom/google/inject/internal/MoreTypes;
02-05 00:14:54.571: D/dalvikvm(777): VFY: replacing opcode 0x1c at 0x0021
02-05 00:14:54.580: D/dalvikvm(777): VFY: dead code 0x0023-0045 in Lcom/google/inject/internal/MoreTypes;.canonicalizeForKey (Lcom/google/inject/TypeLiteral;)Lcom/google/inject/TypeLiteral;
02-05 00:14:54.611: D/AndroidRuntime(777): Shutting down VM
02-05 00:14:54.611: W/dalvikvm(777): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
02-05 00:14:54.640: E/AndroidRuntime(777): FATAL EXCEPTION: main
02-05 00:14:54.640: E/AndroidRuntime(777): java.lang.NoClassDefFoundError: javax.inject.Provider
02-05 00:14:54.640: E/AndroidRuntime(777):  at com.google.inject.internal.MoreTypes.canonicalizeForKey(MoreTypes.java:81)
02-05 00:14:54.640: E/AndroidRuntime(777):  at com.google.inject.Key.<init>(Key.java:119)
02-05 00:14:54.640: E/AndroidRuntime(777):  at com.google.inject.Key.get(Key.java:212)
02-05 00:14:54.640: E/AndroidRuntime(777):  at roboguice.inject.ContextScope.enter(ContextScope.java:106)
02-05 00:14:54.640: E/AndroidRuntime(777):  at roboguice.inject.ContextScope.<init>(ContextScope.java:80)
02-05 00:14:54.640: E/AndroidRuntime(777):  at roboguice.application.RoboApplication.initInstanceMembers(RoboApplication.java:100)
02-05 00:14:54.640: E/AndroidRuntime(777):  at roboguice.application.RoboApplication.getInjector(RoboApplication.java:83)
02-05 00:14:54.640: E/AndroidRuntime(777):  at roboguice.activity.RoboActivity.getInjector(RoboActivity.java:192)
02-05 00:14:54.640: E/AndroidRuntime(777):  at roboguice.activity.RoboActivity.onCreate(RoboActivity.java:70)
02-05 00:14:54.640: E/AndroidRuntime(777):  at com.robotest.MyActivity.onCreate(MyActivity.java:19)
02-05 00:14:54.640: E/AndroidRuntime(777):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-05 00:14:54.640: E/AndroidRuntime(777):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
02-05 00:14:54.640: E/AndroidRuntime(777):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
02-05 00:14:54.640: E/AndroidRuntime(777):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
02-05 00:14:54.640: E/AndroidRuntime(777):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
02-05 00:14:54.640: E/AndroidRuntime(777):  at android.os.Handler.dispatchMessage(Handler.java:99)
02-05 00:14:54.640: E/AndroidRuntime(777):  at android.os.Looper.loop(Looper.java:123)
02-05 00:14:54.640: E/AndroidRuntime(777):  at android.app.ActivityThread.main(ActivityThread.java:4627)
02-05 00:14:54.640: E/AndroidRuntime(777):  at java.lang.reflect.Method.invokeNative(Native Method)
02-05 00:14:54.640: E/AndroidRuntime(777):  at java.lang.reflect.Method.invoke(Method.java:521)
02-05 00:14:54.640: E/AndroidRuntime(777):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-05 00:14:54.640: E/AndroidRuntime(777):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-05 00:14:54.640: E/AndroidRuntime(777):  at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

    标签: android roboguice


    【解决方案1】:

    下载 javax.inject-1.jar 并将其添加到您的构建路径中。

    here

    另外,请确保您使用的是Guice without AOP

    【讨论】:

    • 不确定您的意思,因为我在 Android 上对其进行了测试并且它有效。
    • guice-3.0.zip 中的 javax.inject.jar 和 javax.inject-1.jar 有什么区别?它有效,而另一个无效,但我找不到任何文档说明原因。
    • @adamwong246:这确实解决了使用 RoboGuice 2 和 Guice 3-noAOP 时的问题。如果使用 RoboGuice 1,您应该使用 Guice 2-noAOP(如前所述),在 RoboGuice1+Guice2 中,这不是问题。
    • 为我工作(Guice 3.0,无 AOP)
    【解决方案2】:

    谢谢,我似乎在使用 Guice 3,Roboguice 1.1.2 不支持它。我删除了 Guice 3 并放入了 Guice 2.0-no_aop,这解决了我的问题。再次感谢!

    【讨论】:

    • 将 Roboguice 升级到新版本比降级 Guice 不是更好吗?
    • 一年前 - 还没有(这个问题来自 2012 年 2 月)。今天 - 当然:)
    【解决方案3】:

    确保拥有

    • roboguice-2.0.jar
    • guice-3.0-no_aop.jar
    • jsr305-1.3.9.jar
    • javax.inject-1.jar

    它应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多