Java 使用AndroidAnnotations注入静态@Bean时的NPE

Java 使用AndroidAnnotations注入静态@Bean时的NPE,java,android,dependency-injection,static,android-annotations,Java,Android,Dependency Injection,Static,Android Annotations,我正试图使用@Bean从以下位置注入一个静态字段: 报告字段在运行时为空: 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.L

我正试图使用
@Bean
从以下位置注入一个静态字段:

报告
字段在运行时为空:

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)
    ...
演示项目
  • 我为你创造了复制错误的机会

注入字段仅在调用带注释的方法后可用。您是否在该点之后访问该字段

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

@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);
    }

}

我根据你的建议更新了演示项目。然而,
NullPointerException
仍然存在。注射没有发生。好的,我现在知道问题出在哪里了。
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)
    ...
@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);
    }

}