Что не так с RoboGuice

Я хочу создать одноэлементный объект, используя RoboGuice, но получаю нулевое исключение. Я не знаю, что не так с моими кодами.

 @Singleton
    public class SessionService {

        private static Session session;

        public Session getSession() {
            if (session == null){
                session = new Session();
            }
            return session;
        }

    }

-

public class ChannelManager {

    @Inject SessionService sessionService;

    public String getName(){
        return sessionService.getSession().getName();
    }

}

public class MainActivity extends RoboActivity{

    @InjectView(R.id.button1) Button btn;
    @Inject SessionService a;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
            a.getSession().setName("dsadas");
        Log.i("A","NEW: "+ a.getSession().getName());
        Log.i("A","NEW NAME: "+ new ChannelManager().getName());        
    }

Я получаю нулевое исключение в строке "new ChannelManager(). GetName()". Что в этом плохого? Заранее спасибо.

2 ответа

Решение

Когда вы делаете new ChannelManager(), вы не используете инъекцию Guice, поэтому ваши введенные поля имеют значение null.

Внедрить ваш ChannelManagerЛибо используйте @Inject аннотации или используйте следующий код для создания вашего экземпляра:

ChannelManager myChannelManager = RoboGuice.getInjector(this).getInstance(ChannelManager.class);

Также подумайте, есть ли необходимость использовать оператор "new" для создания e Object. Это всегда связано с некоторыми проблемами, особенно в (модульных) тестах.

Другие вопросы по тегам