我在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/