Java 插入匕首返回空值

Java 插入匕首返回空值,java,android,dagger,Java,Android,Dagger,这方面已经被封锁了好几天了 出于某种原因,AndroidModule.java中的“应用程序”成员字段在注入后为空 AndroidModule.java @Module( library = true ) public class AndroidModule { @Inject MittoApplication application; @Provides @Singleton SharedPreferences provideSharedPrefer

这方面已经被封锁了好几天了

出于某种原因,AndroidModule.java中的“应用程序”成员字段在注入后为空

AndroidModule.java

@Module(
        library = true
)
public class AndroidModule {

    @Inject MittoApplication application;

    @Provides @Singleton
    SharedPreferences provideSharedPreferences() {
        return PreferenceManager.getDefaultSharedPreferences( application );
    }

}
@Module(
        includes = { ApiModule.class, AndroidModule.class },
        library = true
)
public class ApplicationModule {

    private Application application;
    public ApplicationModule( Application application ) {
        this.application = application;
    }

    @Provides @Singleton
    Application providesApplication() {
        return application;
    }
}
ApplicationModule.java

@Module(
        library = true
)
public class AndroidModule {

    @Inject MittoApplication application;

    @Provides @Singleton
    SharedPreferences provideSharedPreferences() {
        return PreferenceManager.getDefaultSharedPreferences( application );
    }

}
@Module(
        includes = { ApiModule.class, AndroidModule.class },
        library = true
)
public class ApplicationModule {

    private Application application;
    public ApplicationModule( Application application ) {
        this.application = application;
    }

    @Provides @Singleton
    Application providesApplication() {
        return application;
    }
}
BaseActivity.java

public class BaseActivity extends AppCompatActivity {

    private ObjectGraph objectGraph;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        objectGraph = MittoApplication.getApplication(this).buildScopedObjectGraph(getModules());
        objectGraph.inject(this);
    }

    @Override
    protected void onDestroy() {
        objectGraph = null;
        super.onDestroy();
    }

    protected List<Object> getModules(  ) {
        return Arrays.<Object>asList(
        );
    }
}
公共类BaseActivity扩展了AppCompativity{
私有对象图对象图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
objectGraph=MittoApplication.getApplication(this.buildScopedObjectGraph(getModules());
objectGraph.inject(this);
}
@凌驾
受保护的空onDestroy(){
objectGraph=null;
super.ondestory();
}
受保护的列表getModules(){
返回数组.asList(
);
}
}
MittoApplication.java

public class MittoApplication extends Application {

    private static Context context;
    private ObjectGraph objectGraph;

    public void onCreate() {
        super.onCreate();
        MittoApplication.context = getApplicationContext();
        initializeObjectGraph();
    }

    public static MittoApplication getApplication( Context context ) {
        MittoApplication mittoApplication = (MittoApplication) context.getApplicationContext();
        return mittoApplication;
    }

    public ObjectGraph getObjectGraph() {
        return this.objectGraph;
    }

    public ObjectGraph buildObjectGraph( List<Object> modules ) {
        return ObjectGraph.create(modules.toArray() );
    }

    public ObjectGraph buildScopedObjectGraph( List<Object> modules ) {
        return objectGraph.plus(modules.toArray() );
    }

    private ObjectGraph buildInitialObjectGraph( List<Object> modules ) {
        return ObjectGraph.create( modules.toArray() );
    }

    private void initializeObjectGraph() {
        objectGraph = buildInitialObjectGraph( Arrays.<Object>asList( new ApplicationModule(this) ));
    }

    public static Context getContext() {
        return MittoApplication.context;
    }

}
公共类MittoApplication扩展应用程序{
私有静态语境;
私有对象图对象图;
public void onCreate(){
super.onCreate();
MittoApplication.context=getApplicationContext();
初始化对象图();
}
公共静态MittoApplication getApplication(上下文){
MittoApplication MittoApplication=(MittoApplication)上下文。getApplicationContext();
返回应用程序;
}
公共对象图getObjectGraph(){
返回此.objectGraph;
}
公共对象图buildObjectGraph(列出模块){
返回ObjectGraph.create(modules.toArray());
}
公共对象图buildScopedObjectGraph(列出模块){
返回objectGraph.plus(modules.toArray());
}
私有ObjectGraph buildInitialObjectGraph(列出模块){
返回ObjectGraph.create(modules.toArray());
}
私有void initializeObjectGraph(){
objectGraph=buildInitialObjectGraph(Arrays.asList(新的应用程序模块(this)));
}
公共静态上下文getContext(){
返回MittoApplication.context;
}
}
我花了很多时间思考这个问题,我看过无数的例子和博客网站。我希望有比我更聪明的人来帮忙


感谢阅读。

字段注入仅在直接调用对象图时有效。要获取提供者方法的
应用程序
实例,需要将其作为提供者方法的参数引用

//@Inject MittoApplication application; //this won't work

@Provides @Singleton
SharedPreferences provideSharedPreferences(Application application) { //this will
    return PreferenceManager.getDefaultSharedPreferences( application );
}
另外,您实际上从未提供过
MittoApplication
,只提供了
应用程序

值得注意的是,您正在使用Dagger1,因此我相信您需要将
AndroidModule
更改为
complete=false

@Module(
        library = true,
        complete = false
)
public class AndroidModule {