【发布时间】:2018-06-01 09:37:23
【问题描述】:
对于Dagger2 用户来说,这似乎是一个非常基本的问题。我最近开始使用RetroFit 探索它。我遵循了一些教程并提出了以下代码(其中一些)。
@Singleton
@Component(modules = {AppModule.class, ApiModule.class})
public interface ApiComponent {
void inject(MainActivity context);
}
public class MyApplication extends Application {
private ApiComponent mApiComponent;
@Override
public void onCreate() {
super.onCreate();
mApiComponent = DaggerApiComponent.builder()
.appModule(new AppModule(this))
.apiModule(new ApiModule("https://rect.otp/demos/"))
.build();
}
public ApiComponent getNetComponent() {
return mApiComponent;
}
}
还有 MainActivity.java
public class MainActivity extends AppCompatActivity {
@Inject
Retrofit retrofit;
ActivityMainBinding mainBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
((MyApplication) getApplication()).getNetComponent().inject(this);
ApiCall api = retrofit.create(ApiCall.class);
}
}
问题
1. 当我将void inject(MainActivity context); 更改为void inject(Context context); 时,我在retrofit 上得到NullPointerException MainActivity。为什么?
当使用
void inject(MainActivity context);时它工作正常。为什么?如果我需要在多个类中注入
RetroFit,应该采用什么方法。为每个班级创建inject()似乎不是解决方案。
我是依赖注入的新手。所以我可以对它有一些指导吗?在多个类中使用它的正确方法是什么。
【问题讨论】: