首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用AndroidAnnotations注入静态@Bean时的NPE

用AndroidAnnotations注入静态@Bean时的NPE
EN

Stack Overflow用户
提问于 2017-05-24 12:05:58
回答 1查看 128关注 0票数 0

我试图使用来自@BeanAndroidAnnotations注入一个静态字段

代码语言:javascript
运行
复制
@EBean
public class LogUtil {

    @Bean(CrashReporting.class) static Reporting reporting;

    public static void log(Activity activity, String method) {
        reporting.log(activity.getClass().getName() + ":" + method);
    }

}

。。

代码语言:javascript
运行
复制
@EBean(scope = EBean.Scope.Singleton)
public class CrashReporting implements Reporting {

    @Override
    public void log(String text) {
        Log.d(getClass().getName(), text);
    }

}

reporting字段在运行时为空:

代码语言:javascript
运行
复制
Caused by: java.lang.NullPointerException: 
Attempt to invoke interface method 
'void com.example.staticinjection.Reporting.log(java.lang.String)' 
on a null object reference
    at com.example.staticinjection.LogUtil.log(LogUtil.java:15)
    at com.example.staticinjection.MainActivity.onCreate(MainActivity.java:12)
    at android.app.Activity.performCreate(Activity.java:6237)
    ...

演示项目

EN

回答 1

Stack Overflow用户

发布于 2017-06-07 17:16:06

只有在调用了@AfterInject注释的方法之后,才能使用注入的字段。在那之后你会进入这个领域吗?

编辑:您不能真正使用静态注入。必须将bean注入活动的实例成员:

代码语言:javascript
运行
复制
@EActivity
public class MainActivity extends AppCompatActivity {

    @Bean
    LogUtil logger;

    @AfterInject
    public void afterInject() {
        logger.log(this, "AFTERINJECT");
    }
}

@EBean
public class LogUtil {

    @Bean(CrashReporting.class) Reporting reporting;

    public void log(Activity activity, String method) {
        reporting.log(activity.getClass().getName() + ":" + method);
    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44157966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档