MVP+Retrofit+RxJava(Flowable)结合使用
2017-12-07 08:18
351 查看
MVP流程图:
添加依赖:
compile 'io.reactivex.rxjava2:rxjava:2.1.7' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' 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'
http
ApiService接口实体类
package com.bwie.com.myapplication.http; import com.bwie.com.myapplication.bean.MessageBean; import com.bwie.com.myapplication.bean.News; import java.util.List; import java.util.Map; import io.reactivex.Flowable; import retrofit2.http.GET; import retrofit2.http.QueryMap; /** * Created by Wangrx on 2017/12/6. */ public interface ApiService { @GET("93app/data.do") Flowable<MessageBean<List<News>>> getNews(@QueryMap Map<String,String> map); }
RetrofitUtils(封装网络请求类)
package com.bwie.com.myapplication.http; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; /** * Created by Wangrx on 2017/12/6. */ public class RetrofitUtils { private static volatile RetrofitUtils instance; private ApiService apiService; private RetrofitUtils(){ Retrofit retrofit = new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .baseUrl("http://www.93.gov.cn/") .build(); apiService = retrofit.create(ApiService.class); } public static RetrofitUtils getInstance(){ if (null==instance){ synchronized (RetrofitUtils.class){ if (instance==null){ instance = new RetrofitUtils(); } } } return instance; } public ApiService getApiService(){ return apiService; } }
model层
IModel接口
package com.bwie.com.myapplication.model; import java.util.Map; /** * Created by Wangrx on 2017/12/6. */ public interface IModel { void getData(Map<String,String> map); }
NewsModel
package com.bwie.com.myapplication.model; import com.bwie.com.myapplication.bean.MessageBean; import com.bwie.com.myapplication.bean.News; import com.bwie.com.myapplication.http.RetrofitUtils; import com.bwie.com.myapplication.presenter.NewsPresenter; import java.util.List; import java.util.Map; import io.reactivex.Flowable; /** * Created by Wangrx on 2017/12/6. */ public class NewsModel implements IModel{ private NewsPresenter presenter; public NewsModel(NewsPresenter presenter){ this.presenter = presenter; } @Override public void getData(Map<String, String> map) { Flowable<MessageBean<List<News>>> flowable = RetrofitUtils.getInstance().getApiService().getNews(map); presenter.getNews(flowable); } }
presenter层
BasePresenter接口
package com.bwie.com.myapplication.presenter; import java.util.Map; /** * Created by Wangrx on 2017/12/6. */ public interface BasePresenter { void getData(Map<String,String> map); }
NewsPresenter
package com.bwie.com.myapplication.presenter; import com.bwie.com.myapplication.bean.MessageBean; import com.bwie.com.myapplication.bean.News; import com.bwie.com.myapplication.model.NewsModel; import com.bwie.com.myapplication.view.Iview; import java.util.List; import java.util.Map; import io.reactivex.Flowable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; import io.reactivex.subscribers.DisposableSubscriber; /** * Created by Wangrx on 2017/12/6. */ public class NewsPresenter implements BasePresenter { private Iview iv; private DisposableSubscriber subscriber; public void attachView(Iview iv) { this.iv = iv; } public void detachView() { if (iv != null) { iv = null; } if (!subscriber.isDisposed()){ subscriber.dispose(); } } @Override public void getData(Map<String, String> map) { NewsModel model = new NewsModel(this); model.getData(map); } public void getNews(Flowable<MessageBean<List<News>>> flowable) { subscriber = flowable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeWith(new DisposableSubscriber<MessageBean<List<News>>>() { @Override public void onNext(MessageBean<List<News>> listMessageBean) { if (listMessageBean != null) { List<News> list = listMessageBean.getData(); if (list != null) { iv.onSuccess(list); } } } @Override public void onError(Throwable t) { iv.onFailed((Exception) t); } @Override public void onComplete() { } }); } }
view层
Iview接口
package com.bwie.com.myapplication.view; /** * Created by Wangrx on 2017/12/6. */ public interface Iview { void onSuccess(Object o); void onFailed(Exception e); }
MainActivity
package com.bwie.com.myapplication; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import com.bwie.com.myapplication.bean.News; import com.bwie.com.myapplication.presenter.NewsPresenter; import com.bwie.com.myapplication.view.Iview; import java.util.HashMap; import java.util.List; import java.util.Map; public class MainActivity extends AppCompatActivity { private NewsPresenter presenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //http://www.93.gov.cn/93app/data.do?channelId=0&startNum=0 Map<String, String> map = new HashMap<>(); map.put("channelId","0"); map.put("startNum","0"); presenter = new NewsPresenter(); presenter.getData(map); presenter.attachView(new Iview() { @Override public void onSuccess(Object o) { if (o instanceof List){ List<News> news = (List<News>) o; Log.i("zzz", "onSuccess: "+news.size()); } } @Override public void onFailed(Exception e) { Log.i("zzz", "onSuccess: "+e.getMessage()); } }); } @Override protected void onDestroy() { super.onDestroy(); if (presenter!=null){ presenter.detachView(); } } }
在MainActivity中onSuccess()得到数据,将数据显示出来即可。
相关文章推荐
- 使用MVP框架,retrofit结合Rxjava以及fresco加载图片,用recycleview实现
- Material Design 风格 结合使用 Retrofit RxJava Jsoup Mvp 模式的一款资讯类 学习 app
- MVP+ Retrofit+RxJava+XRecyclerView+TabLayout+Fresco结合使用
- Retrofit结合RxJava个人使用经验
- MVP+RxJava+Retrofit使用GET解析拼参数
- 进阶之路:MVP+Retrofit+RxJava组合使用
- 进阶之路:MVP+Retrofit+RxJava组合使用
- Android中的RxJava,Retrofit,MVP的使用
- MVP封装成基类结合retrofit和Rxjava
- Rxjava+Retrofit+Mvp的使用实例(基于retrofit2.1.0)
- RxJava和Retrofit结合使用
- MVP+Retrofit+RxJava 使用
- 使用MVP+Retrofit+RxJava实现的的Android Demo (上)使用Nuclues库实现MVP
- 如何优雅的使用Retrofit、Rxjava、Butterknife、Material开发一款MVP模式的新闻+天气预报+妹子的Android app
- Retrofit和RxJava结合使用
- 进一步使用Retrofit,结合MVP让你的网络请求更加方便
- Retrofit和RxJava结合使用例子分析
- Retrofit结合RxJava1.x使用
- rxjava 和retrofit 结合使用
- 仿googleMVP设计模式示例demo,结合rxjava,retrofit2.0