2013-06-12 23 views
0

我想使用RoboGuice创建一个单例对象,但是我得到了null异常。我不知道我的代码有什么问题。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());   
    } 

我得到的 “新ChannelManager()的getName()。” 行空例外。那有什么问题? 在此先感谢。

回答

0

当你做new ChannelManager(),你没有使用Guice注射,所以你注入的字段为空。

以注入ChannelManager,要么使用@Inject注释或者使用下面的代码来创建您的实例:

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

我明白了,我做到了,它工作!谢谢!我首选使用@Inject。所以,我在SessionService附近声明了一个带注释的变量。 – nesimtunc

0

还要考虑是否有必要使用new操作符来创建电子邮件对象。这总是牵涉到一些问题,特别是在(单元)测试中。