【发布时间】:2012-03-16 11:30:28
【问题描述】:
我如何获得上下文?我在这里做错了吗?
这是我在 Android 中的错误:
致命异常:主要 com.google.inject.CreationException:Guice 创建错误: 1) 注入构造函数时出错,java.lang.NullPointerException
public class DatabaseProvider implements Provider {
@Inject
protected static Provider<Context> contextProvider;
//eror context is null
protected Context context = contextProvider.get();
@Override
public DatabaseHelper get() {
return (DatabaseHelper) OpenHelperManager
.getHelper(context, DatabaseHelper.class);
}
}
实现 DaoProvider:
public class DaoProvider<D extends Dao<E, ?>, E> implements Provider<D> {
@Inject
private DatabaseProvider databaseProvider;
private final Class<E> cls;
public DaoProvider(Class<E> cls) {
this.cls = cls;
}
@Override
public D get() {
try {
return databaseProvider.get().getDao(cls);
} catch (SQLException e) {
Log.d("injection", "database provider error", e);
}
return null;
}
}
在模块中实现:
public class BabyModule extends AbstractModule {
@Override
protected void configure() {
TypeLiteral<Dao<Baby, Integer>> typeLiteral = new TypeLiteral<Dao<Baby, Integer>>(){};
DaoProvider<Dao<Baby,Integer>, Baby> provider = new DaoProvider<Dao<Baby,Integer>, Baby>(Baby.class);
bind(typeLiteral).toProvider(provider);
}
}
感谢您的帮助
【问题讨论】:
-
任何
@Inject直到构造函数运行之后才会发生。 -
构造函数是什么意思?
-
在完全创建对象之后之前,无法分析该对象的注入内容。因此
contextProvider.get()在 Guice 设置 contextProvder 之前运行。 -
您知道如何解决吗?
-
延迟请求上下文,直到您真正需要它。