Что не так с 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. Это всегда связано с некоторыми проблемами, особенно в (модульных) тестах.