1

How I get the Context? Am I doing something wrong here?

This is my Error in Android:

FATAL EXCEPTION: main com.google.inject.CreationException: Guice creation errors: 1) Error injecting constructor, 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);
    }
}

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

}

Implement in module:

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

}

Thanks for help

user949884
  • 503
  • 1
  • 8
  • 15

3 Answers3

2

I have my own solution. I get my context about the application.class now.

public class DatabaseHelperProvider implements Provider<DatabaseHelper> {

    @Inject
    Application application;

    @Override
    public DatabaseHelper get() {

    return OpenHelperManager
            .getHelper(application.getApplicationContext(), DatabaseHelper.class);
    }
}
user949884
  • 503
  • 1
  • 8
  • 15
1

Simply using

@Inject Context context

instead of

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

should solve your problem. If it doesn´t why you just don´t access the context lazy...

onlythoughtworks
  • 794
  • 8
  • 13
-1

better:

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

You can tak context from activity (Activity is extending Context).

pjanecze
  • 3,145
  • 3
  • 21
  • 28