gpt4 book ai didi

android - RG 3.0 注入(inject)的 View 为空

转载 作者:搜寻专家 更新时间:2023-11-01 07:57:15 26 4
gpt4 key购买 nike

我直接在 Android Studio 中使用 RoboGuice 3.0,因为我需要对 ActionBarActivity 的支持。这是我的部门:

编译'org.roboguice:roboguice:3.0'

我必须做的第一件奇怪的事情是解决“无法使用注释数据库”的 ClassNotFoundException。似乎如果没有给出注释包,则 packageList 是 prepended with empty string和 DI 框架提示它无法在根包中找到 AnnotationDatabaseImpl(这是预期的)。所以我在 list 中这样做了:

<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);
}
}

setSupportActionBar() 抛出 NPE。我逐步通过调试器和注入(inject) View 时,viewMembersInjectors 映射为空。我在想我必须做的奇怪的修复,这是相关的。不知何故未发现 injectview 成员。但是我的 @ContentView 注入(inject)有效(如果我删除它,则永远不会调用内容更改的回调)。

有人知道如何解决这个问题吗?

最佳答案

一种解决方案是使用扩展 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 的元数据值中添加数据库名称。

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com