MVP-Dagger2-Rxjava2-Retrofit整合

来源:互联网 发布:公安网络报警平台 编辑:程序博客网 时间:2024/05/22 10:55

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




原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 打了排卵针不排卵怎么办 孩孑上课不专心怎么办 4岁上课不听讲怎么办 孩子上课不认真听讲怎么办 孩子做什么都慢怎么办 7岁上课不听讲怎么办 打孩子脸肿了怎么办 一岁宝宝太调皮怎么办 怀孕早期喝了酒怎么办 怀孕期间喝了酒怎么办 一岁宝宝多动怎么办 3岁前儿童多动症怎么办 好动症的孩子该怎么办 18个月宝宝腹泻怎么办 8个月小孩发烧怎么办 八个月大宝宝发烧怎么办 8个月宝宝拉稀水怎么办 八个月宝宝38度怎么办 8个月的宝宝发烧怎么办 八个月大的宝宝拉肚子怎么办 9孩子上课坐不住怎么办 3岁宝宝太皮怎么办 4岁的宝宝多动症怎么办 小孩好动注意力不集中怎么办 乐扣加热变形了怎么办 3岁宝宝咳嗽厉害怎么办 六个月婴儿呕奶怎么办 刚出生婴儿呕奶怎么办 宝宝拉颗粒便便怎么办 奶水不够宝宝又不吃奶粉怎么办 一岁突然不吃饭怎么办 母乳不够吃宝宝不吃奶粉怎么办 八个月不吃辅食怎么办 孩子长得太快怎么办 反复发烧到39度怎么办 儿童发烧到39度怎么办 7岁儿童发烧40度怎么办 7岁反复发烧39度怎么办 宝宝烧到39.5度怎么办 3岁儿童发烧39度怎么办 孩子发高烧怎么办39度5