我试图使用来自@Bean的AndroidAnnotations注入一个静态字段
@EBean
public class LogUtil {
@Bean(CrashReporting.class) static Reporting reporting;
public static void log(Activity activity, String method) {
reporting.log(activity.getClass().getName() + ":" + method);
}
}。。
@EBean(scope = EBean.Scope.Singleton)
public class CrashReporting implements Reporting {
@Override
public void log(String text) {
Log.d(getClass().getName(), text);
}
}reporting字段在运行时为空:
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)
...演示项目
发布于 2017-06-07 17:16:06
只有在调用了@AfterInject注释的方法之后,才能使用注入的字段。在那之后你会进入这个领域吗?
编辑:您不能真正使用静态注入。必须将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);
}
}https://stackoverflow.com/questions/44157966
复制相似问题