dagger2+rxjava+retrofit简单例子

本文介绍了一种使用Dagger2进行依赖注入、RxJava处理异步操作及Retrofit实现网络请求的技术方案。通过具体示例展示了如何在Android应用中整合这三项技术,实现高效的数据获取和展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.gradle配置

在project的gradle配置:

 dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'

        classpath 'me.tatarka:gradle-retrolambda:3.2.4'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

    }


在app得gradle配置:


dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.jakewharton:butterknife:7.0.1'

    compile 'com.squareup.retrofit2:retrofit:2.0.1'
    compile 'com.squareup.retrofit2:converter-gson:2.0.2'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0'

    compile 'io.reactivex:rxandroid:1.1.0'
    compile 'io.reactivex:rxjava:1.1.0'

    compile 'com.google.dagger:dagger:2.1'
    apt 'com.google.dagger:dagger-compiler:2.1'
    provided 'org.glassfish:javax.annotation:10.0-b28'
}

二.项目结构

  对于mpv架构讲解,这里就不在解释了,大家可以在网上查找相关文章,这里的presenter是单例注入的,依赖注入的好处大家也可以了解上一篇博文。

   @Bind(R.id.tv_displayWeather) TextView tv;
    @Bind(R.id.progressBar) ProgressBar progressBar;

    @Inject @Singleton public MainPresenter myPresenter;//Dagger不能注入私有变量

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);//ButterKnife注入
        initView();

    }

    public void displayWeather(View view) {
        myPresenter.getData();
    }

    @Override
    public void initView() {
        MainComponent component=DaggerMainComponent.builder().mainPresenterModule(new MainPresenterModule(this)).build();
        component.inject(this);
    }

    @Override
    public void showData(MainModelBean mybean) {
        if(mybean==null){
            tv.setText("请求失败");
        }
        else{
            MainModelBean.WeatherinfoEntity bean = mybean.getWeatherinfo();
            String city=bean.getCity();
            String wd=bean.getWD();
            String ws=bean.getWS();
            String time=bean.getTime();
            String data="城市:"+city+"\n风向:"+wd+"\n风级:"+ws+"\n发布时间:"+time;
            tv.setText(data);
        }
        hideProgressBar();
    }
    public void showProgressBar(){
        progressBar.setVisibility(View.VISIBLE);
    }
    public void hideProgressBar(){
        progressBar.setVisibility(View.GONE);
    }

model层主要负责把数据给到presenter

public class MainModel {
    String baseUrl="http://www.weather.com.cn/adat/sk/";

    private List<MainModelBean> list = new ArrayList<>();
    private MainPresenter mainPresenter;
    public MainModel(MainPresenter mainPresenter){
        this.mainPresenter=mainPresenter;
    }
    public void getData(){
        Retrofit retrofit=new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
        WeatherService service=retrofit.create(WeatherService.class);
        service.getModelBean("101010100")
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new MySubscriber());
    }
    interface WeatherService{
        @GET("{cityId}"+".html")
        Observable<MainModelBean> getModelBean(@Path("cityId") String cityId);
    }
    class MySubscriber extends Subscriber<MainModelBean>{
        @Override
        public void onCompleted() {
            mainPresenter.loadDataSuccess(list);
        }

        @Override
        public void onError(Throwable e) {
            mainPresenter.loadDataFailure();
        }

        @Override
        public void onNext(MainModelBean mainModelBean) {
            list.add(mainModelBean);
        }
    }
}

presernter主要把数据传给activity显示

public class MainPresenter {
    private MainView mainView;


    public MainModel mainModel=new MainModel(this);

    @Inject @Singleton
    public MainPresenter(MainView mainView) {
        this.mainView=mainView;

    }
    public void getData(){
        mainView.showProgressBar();
        mainModel.getData();
    }
    public void loadDataSuccess(List<MainModelBean> list) {

        mainView.showData(list.get(0));
    }
    public void loadDataFailure(){
        mainView.showData(null);
    }
}

到此,关于dagger2+rxjava+retrofit就完毕了.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值