我在android studio中直接使用roboguice 3.0,因为我需要actionbaractivity的支持。这是我的部门:
compile 'org.roboguice:roboguice:3.0'
我要做的第一件奇怪的事情是为“无法使用注释数据库”解析ClassNotFoundException。似乎如果没有给出注释包,那么packageList是prepended with empty string并且di framework抱怨它在根包中找不到annotationdatabaseimpl(这是预期的)。所以我在我的名单上这样做了:

<meta-data android:name="roboguice.annotations.packages" android:value="roboguice"/>

解决了这个问题。然后,我把代码改成:
@ContentView(R.layout.activity_playlists)
public class Playlists extends RoboActionBarActivity {
  @InjectView(R.id.toolbar)
  Toolbar toolbar;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setSupportActionBar(toolbar);
  }
}

setUpportActionBar()抛出一个NPE。我通过调试器
在注入视图时,ViewMembersInjectors映射为空。我在想我必须做的奇怪的修复,这是相关的。不知怎么的,injectview成员没有被发现。但是,@contentview注入可以工作(如果我删除它,则永远不会调用content changed回调)。
有人知道怎么解决这个问题吗?

最佳答案

一种解决方案是使用扩展application.class的自定义类,您可以禁用注释数据库的使用。

public class CustomApplication extends Application {
    public void onCreate() {
        super.onCreate();
        RoboGuice.setUseAnnotationDatabases(false);
    }
}

另一种方法是创建名为roboguice.useAnnotationDatabases的环境变量,该变量的值设置为false,因为rg3似乎检查该值。
这将允许您像以前一样使用roboguice,尽管它将失去使用注释数据库所获得的所有性能收益。
更新
生成注释数据库还可以修复npe,并为应用程序增加一些性能增益。为此,首先必须在build.gradle中包含以下依赖项。
depencencies {
...
    provided 'org.roboguice:roboblender:3.0'
}

还应添加以下内容:
allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-AguiceAnnotationDatabasePackageName=databasename"
        }
    }
}

要使数据库正常工作,应该在AndroidManifest.xml的元数据值中添加databasename。
 <meta-data android:name="roboguice.annotations.packages" android:value="roboguice,databasename"/>

关于android - RG 3.0中插入的 View 为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26555970/

10-09 07:24