安卓Roboguice异常

10

我刚开始学习在Android中使用Roboguice。尝试实现这个简单的上下文注入,但是出现了以下异常。 我搜索了一下并阅读了很多帖子,但没有一个解决了我的问题。 以下是异常信息,有什么想法吗?

提前致谢

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)
3个回答

33

2
不确定你的意思,因为我在 Android 上测试过它,而且它可以正常工作。 - Luis
1
javax.inject.jar在guice-3.0.zip中和javax.inject-1.jar有什么区别?它可以工作,而另一个却不能,但我找不到任何文档说明原因。 - dbaugh
@adamwong246:这解决了使用RoboGuice 2和Guice 3-noAOP时的问题。如果使用RoboGuice 1,则应该使用Guice 2-noAOP(正如forhas所提到的),在RoboGuice1+Guice2中也不会出现这个问题。 - Jon Adams
对我有用(Guice 3.0,没有AOP) - uncle Lem

7

谢谢,看起来我使用的是不被Roboguice 1.1.2支持的Guice 3。我移除了Guice 3并替换成了Guice 2.0-no_aop,这解决了我的问题。再次感谢!


升级Roboguice到新版本而不是降级Guice,这样不是更好吗? - Vitalii Korsakov
一年前 - 还没有(这个问题是来自2012年2月)。今天 - 当然 :) - forhas

3
请确保拥有以下文件:
  • roboguice-2.0.jar
  • guice-3.0-no_aop.jar
  • jsr305-1.3.9.jar
  • javax.inject-1.jar
这样就可以正常工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接