0

我想使用 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()”行上得到空异常。那有什么问题?提前致谢。

4

2 回答 2

0

当您这样做时new ChannelManager(),您没有使用 Guice 注入,因此您注入的字段为空。

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

ChannelManager myChannelManager = RoboGuice.getInjector(this).getInstance(ChannelManager.class);
于 2013-06-12T10:08:33.313 回答
0

还要考虑是否有必要使用“新”运算符来创建 e 对象。这总是暗示一些问题,尤其是在(单元)测试中。

于 2013-07-22T08:02:59.750 回答