MVP-Dagger2-Rxjava2-Retrofit整合

xiaoxiao2021-02-28  97

最近刚学习了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

转载请注明原文地址: https://www.6miu.com/read-32593.html

最新回复(0)