RoboGuice 3.0 NoClassDefFoundError:AnnotationDatabaseImpl

时间:2014-10-30 19:20:47

标签: android roboguice

由于某种原因,RoboBlender不会生成注释数据库。 我的build.gradle具有以下依赖项:

dependencies {
    provided 'org.roboguice:roboblender:3.0'
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'org.roboguice:roboguice:3.0'
}

5 个答案:

答案 0 :(得分:4)

这不是最终解决方案,但它可以帮助您。我不知道为什么,但RoboGuice 3.0和3.0.1抛出此异常。您需要做的是禁用MainActivity中数据库的注释,如下所示:

static {
    RoboGuice.setUseAnnotationDatabases(false);
}

我希望这个帮助

答案 1 :(得分:1)

好的,似乎因为我没有在主要课程MainActivity中进行任何注射,所以它没有触发内部AsyncTask的注释处理。因此,没有创建注释数据库。

此外,似乎不支持匿名内部类中的注入。所以AsyncTask需要是一个合适的类(它仍然可以在MainActivity内。)

我还没弄明白如何告诉RoboGuice检查内部类,即使外部类没有注射。

答案 2 :(得分:0)

项目结构的其余部分是什么样的?

具体来说,您是否阅读了RoboBlender wiki

默认情况下,Android Studio的更高版本会生成一个属于Configuring RoboBlender for a large application using libraries类别的项目。

下面修复了以下内容:

  1. 重新排列build.gradle中的依赖项
  2. 在项目
  3. 中提供指向GuiceModule的指针
  4. 项目的基本模块

  5. diff --git a/app/build.gradle b/app/build.gradle
    index 1e69cec..8450fff 100644
    --- a/app/build.gradle
    +++ b/app/build.gradle
    @@ -34,9 +34,9 @@ android {
     }
    
     dependencies {
    -    provided 'org.roboguice:roboblender:3.0'
         compile fileTree(dir: 'libs', include: ['*.jar'])
         compile 'org.roboguice:roboguice:3.0'
    +    provided 'org.roboguice:roboblender:3.0'
     }
    
     project.tasks.withType(JavaCompile) { task ->
    diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
    index 017d11e..dba9e49 100644
    --- a/app/src/main/AndroidManifest.xml
    +++ b/app/src/main/AndroidManifest.xml
    @@ -8,6 +8,7 @@
             android:label="@string/app_name"
             android:theme="@style/AppTheme" >
             <meta-data android:name="roboguice.annotations.packages" android:value="org.jush.roboguice3test"/>
    +        <meta-data android:name="roboguice.modules" android:value="org.jush.roboguice3test.GuiceModule"/>
             <activity
                 android:name="org.jush.roboguice3test.MainActivity"
                 android:label="@string/app_name" >
    


    package org.jush.roboguice3test;
    
    import android.app.Application;
    
    import com.google.inject.AbstractModule;
    
    public class GuiceModule extends AbstractModule {
        private Application application;
    
        public GuiceModule(Application application) {
            this.application = application;
        }
    
        @Override
        protected void configure() {
        }
    }
    

答案 3 :(得分:0)

你有什么办法可以触发注释处理?我的主要活动是注射。 maina活动继承自抽象活动,其也具有注射。该抽象活动继承自RoboActivity。

当我将 roboguice.annotations.packages 设置为 roboguice 时,不再抛出NoClassFound异常,但我得到第一个inject-Object的NullPointer异常我想用。

我使用eclipse启动应用程序。

当我禁用RoboBlender(RoboGuice.setUseAnnotationDatabases(false);)注入时。

答案 4 :(得分:0)

AnnotationDatabaseImpl在编译时生成

这里有解释

Injected objects became null after upgrading to Roboguice 3