最近刚学习了MVP-Dagger2-Rxjava2-Retrofit
将MVP-Dagger2-Rxjava2-Retrofit做了一个简单的整合
贴出部分代码
源码下载地址在最下方
添加依赖:
//retrofit
compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'com.squareup.retrofit2:converter-gson:2.3.0' compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' // 用于rxjava和retrofit //okhttp compile 'com.squareup.okhttp3:okhttp:3.8.0' compile 'com.squareup.okhttp3:logging-interceptor:3.8.0' //logging拦截器 //dagger apt 'com.google.dagger:dagger-compiler:2.0.2' compile 'com.google.dagger:dagger:2.0.2' provided 'org.glassfish:javax.annotation:10.0-b28' //rxjava compile 'io.reactivex.rxjava2:rxjava:2.1.0' compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
apply plugin: 'com.neenbedankt.android-apt' //app model中添加
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' //app build中添加}
MVP的model部分,用来做数据处理 public class HomeModel { ApiService mApiService; public HomeModel(ApiService apiService) { mApiService = apiService; } public Observable<ResponseBody> getData() { Observable<ResponseBody> data = mApiService.getBannerData(); return data; }}
MVP的presenter部分,作为model和View的交互 public class HomePresenter extends BasePresenter<HomeModel, BaseView> { public HomePresenter(HomeModel model, BaseView view) { super(model, view); } @Override public void requestData() { mModel.getData() .subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<ResponseBody>() { Disposable mDisposable; @Override public void onSubscribe(@NonNull Disposable d) { mDisposable = d; } @Override public void onNext(@NonNull ResponseBody responseBody) { mView.showloading(); if (responseBody != null) { mView.showResult(responseBody.toString()); } else { mView.showNoData(); } mView.showDismiss(); } @Override public void onError(@NonNull Throwable e) { mView.showDismiss(); mView.showError(e.getMessage().toString()); } @Override public void onComplete() { mView.showDismiss(); mDisposable.dispose(); } }); }
}
Dagger module 提供方法 @Module public class HomeModule { private BaseView mView; public HomeModule(BaseView view) { mView = view; } @Provides @UIScope public BaseView provideView() { return mView; } @Provides @UIScope public HomeModel provideHomeModel(ApiService apiService) { return new HomeModel(apiService); } @Provides @UIScope public HomePresenter provideHomePresenter(HomeModel model, BaseView view) { return new HomePresenter(model, view); } @Provides @UIScope public ProgressDialog provideProgressDialog(BaseView view) { return new ProgressDialog((Context) view); }
}
Dagger中Component关联module
@Singleton @Component(modules = {AppModule.class, HttpModule.class}) public interface AppComponent { ApiService getApi(); }
自定义一个Application用于dagger的封装 public class MyApplication extends Application { private AppComponent mAppComponent; public static MyApplication get(Context context) { return (MyApplication) context.getApplicationContext(); } public AppComponent getAppComponent() { return mAppComponent; }
最后mainActivity中
public class MainActivity extends AppCompatActivity implements BaseView {
@Override public void onCreate() { super.onCreate(); mAppComponent = DaggerAppComponent.builder().appModule(new AppModule(this)).httpModule(new HttpModule()).build(); } @Inject HomePresenter mHomePresenter; @Inject ProgressDialog mProgressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DaggerHomeComponent.builder() .appComponent(MyApplication.get(this).getAppComponent()) .homeModule(new HomeModule(this)) .build() .inject(this); mHomePresenter.requestData(); } @Override public void showloading() { mProgressDialog.show(); } @Override public void showDismiss() { mProgressDialog.dismiss(); } @Override public void showError(String msg) { mProgressDialog.dismiss(); Toast.makeText(this, "" + msg, Toast.LENGTH_SHORT).show(); } @Override public void showResult(String list) { Toast.makeText(this, "SUCCESS:" + list.toString(), Toast.LENGTH_SHORT).show(); } @Override public void showNoData() { Toast.makeText(this, "" + "数据NULL", Toast.LENGTH_SHORT).show(); } }
github源码地址:
MVP-Dagger-Retrofit2-RxJava2