【问题标题】:Using Dagger with Observables, RxJava and retrofit将 Dagger 与 Observables、RxJava 和改造一起使用
【发布时间】:2018-07-29 05:51:44
【问题描述】:

我有一个简单的代码 sn-p 如下:

  • 我正在使用 Dagger 将 Retrofit 注入到活动中
  • 因为 Dagger 在OnCreate() 注入,所以工作正常
  • 但是如果我使用如下 Observable 来使用 RxJava,我会崩溃,因为 调用可观察代码时不会创建改造客户端, 因为注射发生在以后
  • 如何正确使用 Dagger 和 Observable

public class MainActivity extends AppCompatActivity {

    @Inject
    Retrofit retrofit;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ((ThisForThatApplication)getApplication()).getNetComponent().inject(this);
    }


    Observable<CategoryHomeModel[]> categoriesObservable = retrofit.
            .create(Restapi.class)
            .getCategories1(new GetHeaders().prepareHeaders())
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread());


}

【问题讨论】:

    标签: retrofit2 rx-java2 dagger-2


    【解决方案1】:

    事实证明,这很简单......注意与匕首有关:D

    private Observable<CategoryHomeModel[]> getCategoriesObservable() {
            Observable<CategoryHomeModel[]> categoriesObservable = retrofit
                    .create(Restapi.class)
                    .getCategories1(new GetHeaders().prepareHeaders())
                    .subscribeOn(Schedulers.newThread())
                    .observeOn(AndroidSchedulers.mainThread());
            return categoriesObservable;
        }
    
    
        private Observable<WalletBalance> getWalletObservable() {
            Observable<WalletBalance> walletObservable = retrofit
                    .create(Restapi.class)
                    .getWalletBalance1(new GetHeaders().prepareHeaders())
                    .subscribeOn(Schedulers.newThread())
                    .observeOn(AndroidSchedulers.mainThread());
            return walletObservable;
        }
    
        private Observable<Settings> getSettingsObservable() {
            Observable<Settings> settingsObservable = retrofit
                    .create(Restapi.class)
                    .getSettings1(new GetHeaders().prepareHeaders())
                    .subscribeOn(Schedulers.newThread())
                    .observeOn(AndroidSchedulers.mainThread());
            return settingsObservable;
        }
    
        private Observable<SwapSettings> getRatingsObservble() {
            Observable<SwapSettings> ratingsObservable = retrofit
                    .create(Restapi.class)
                    .rateMySwap1(new GetHeaders().prepareHeaders())
                    .subscribeOn(Schedulers.newThread())
                    .observeOn(AndroidSchedulers.mainThread());
            return ratingsObservable;
    
        }
    
        private void executeApis() {
            List<Observable<?>> observables = Lists.newArrayList(getCategoriesObservable(),
                    getWalletObservable(), getSettingsObservable(), getRatingsObservble());
            Observable.merge(observables).toList().subscribe(new Consumer<List<Object>>() {
                @Override
                public void accept(List<Object> objects) throws Exception {
                    Timber.d("");
                }
    
            }, new Consumer<Throwable>() {
                @Override
                public void accept(Throwable throwable) throws Exception {
                    Timber.d("");
                }
            });
        }
    

    【讨论】:

      猜你喜欢
      • 2019-11-12
      • 2017-01-12
      • 2023-03-09
      • 2019-10-21
      • 1970-01-01
      • 2016-01-29
      • 2017-11-13
      • 1970-01-01
      • 2018-10-05
      相关资源
      最近更新 更多