Как мне получить контекст с подсказкой в ​​провайдере? - PullRequest
1 голос
/ 16 марта 2012

Как мне получить контекст? Я что-то здесь не так делаю?

Это моя ошибка в 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);
}

}

Спасибо за помощь

Ответы [ 3 ]

2 голосов
/ 28 марта 2012

У меня есть собственное решение.Я получил свой контекст о application.class сейчас.

public class DatabaseHelperProvider implements Provider<DatabaseHelper> {

    @Inject
    Application application;

    @Override
    public DatabaseHelper get() {

    return OpenHelperManager
            .getHelper(application.getApplicationContext(), DatabaseHelper.class);
    }
}
1 голос
/ 28 марта 2012

Простое использование

@Inject Context context

вместо

@Inject protected static Provider<Context> contextProvider; //eror context is null<br> protected Context context = contextProvider.get();

должно решить вашу проблему.Если это не то, почему вы просто не получаете доступ к контексту, ленивый ...

0 голосов
/ 16 марта 2012

лучше:

@Override
public DatabaseHelper get(Context context) {
     return (DatabaseHelper) OpenHelperManager.getHelper(context, DatabaseHelper.class);
}

Вы можете взять контекст из действия (действие расширяет контекст).

...