2014-09-08 2 views
0

У меня есть некоторые интерфейсы, а некоторые бетонные классы реализуют эти интерфейсы. У меня есть конфигурация в классе AbstractModule.RoboGuice: введите класс вручную в нормальный класс

Но моя проблема: @Inject просто работает внутри класса RoboGuice, такие как RoboFragment, RoboActivity ...

Например:

public class Fragment extends RoboFragment { 

    @Inject 
    ICustomClass helper; // work. helper will be initialized and call successfully. 

} 

public class JavaNormalClass { 
    @Inject 
    ICustomClass helper; // doesn't work. NullPointerException 
} 

Так что, я думаю, RoboGuice не вводить пользовательский класс когда он находится внутри нормального класса, поэтому я должен его называть вручную. (Я думаю !!!) Итак, как исправить мою проблему?

Спасибо :)

ответ

0

Это простое решение для меня.

Вы поместите эту строку кода перед тем, как позвонить любому члену @Inject. Лучший способ может быть в конструкторе нормального класса или onCreate деятельности ...

public class CustomClass { 

    @Inject 
    IDBDAL dbDAL; 

    // can be application context or activity context 
    private Context mContext; 

    public CustomClass() { 
     // you can get context variable somewhere else 
     mContext = MyApplication.getAppContext(); 
     RoboGuice.getInjector(mContext).injectMembersWithoutViews(this); 
     // from now. you can use dbDAL object 
     dbDAL.doSomething(); // work like charm :) 
    } 
} 

Я думаю, что это решение является универсальным и может применяться к нескольким ситуациям. Надеюсь эта помощь :)