RxJava+Retrofit+MVP
2017-12-19 20:04
183 查看
导依赖
model层接口
public class NewsPresenter implements BasePresenter{
private IView iView;
private DisposableSubscriber subscriber;
public void attachView(IView iView){
this.iView=iView;
}
public void detachView(){
if (iView!=null){
iView=null;
}
if (subscriber!=null){
if (!subscriber.isDisposed()){
subscriber.dispose();
}
}
}
public void getNews(Flowable<GoodsBean> flowable){
subscriber = (DisposableSubscriber)flowable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableSubscriber<GoodsBean>() {
@Override
public void onNext(GoodsBean listNewsBean) {
// if (listNewsBean != null) {
iView.onSuccessed(listNewsBean);
// }
}
@Override
public void onError(Throwable t) {
iView.onFailed(new Exception(t));
Log.e(TAG, "onNext: "+t );
}
@Override
public void onComplete() {
}
});
}
@Override
public void getData(Map<String, String> map, String url) {
NewModel model = new NewModel(this);
model.getData(map,url);
}
}
View层接口
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'请求工具
public interface ApiService { @GET("93app/data.do") Flowable<NewsBean<List<MsgBean>>>getNews(@QueryMap Map<String,String> map); }RetrofitUtils
public class RetrofitUtils { private static volatile RetrofitUtils instance; private final ApiService apiService; private RetrofitUtils(String url) { Retrofit retrofit = new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .baseUrl(url) .build(); apiService = retrofit.create(ApiService.class); } public static RetrofitUtils getInstance(String url){ if (instance==null){ synchronized (RetrofitUtils.class){ if (instance==null){ instance=new RetrofitUtils(url); } } } return instance; } public ApiService getApiService(){ return apiService; } }
model层接口
public interface IModel { void getData(Map<String,String> map,String url); }model获取数据
public class NewModel implements IModel { private NewsPresenter newsPresenter; public NewModel(NewsPresenter newsPresenter){ this.newsPresenter=newsPresenter; } @Override public void getData(Map<String, String> map, String url) { Flowable<NewsBean<List<MsgBean>>> flowable = RetrofitUtils.getInstance(url).getApiService().getNews(map); newsPresenter.getNews(flowable); } }presenter层接口
public interface BasePresenter { void getData(Map<String,String> map,String url); }presenter逻辑操作
public class NewsPresenter implements BasePresenter{
private IView iView;
private DisposableSubscriber subscriber;
public void attachView(IView iView){
this.iView=iView;
}
public void detachView(){
if (iView!=null){
iView=null;
}
if (subscriber!=null){
if (!subscriber.isDisposed()){
subscriber.dispose();
}
}
}
public void getNews(Flowable<GoodsBean> flowable){
subscriber = (DisposableSubscriber)flowable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableSubscriber<GoodsBean>() {
@Override
public void onNext(GoodsBean listNewsBean) {
// if (listNewsBean != null) {
iView.onSuccessed(listNewsBean);
// }
}
@Override
public void onError(Throwable t) {
iView.onFailed(new Exception(t));
Log.e(TAG, "onNext: "+t );
}
@Override
public void onComplete() {
}
});
}
@Override
public void getData(Map<String, String> map, String url) {
NewModel model = new NewModel(this);
model.getData(map,url);
}
}
View层接口
public interface IView { void onSuccessed(NewsBean<List<MsgBean>> listNewsBean); void onFailed(Exception e); }View层展示数据
public class MainActivity extends AppCompatActivity implements IView { private RecyclerView recyclerView; private RVAdapter adapter; private NewsPresenter presenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportActionBar().hide(); Fresco.initialize(this); setContentView(R.layout.activity_main); recyclerView = (RecyclerView) findViewById(R.id.rv); //初始化数据 getData(); } //初始化数据 private void getData() { HashMap<String, String> map = new HashMap<>(); map.put("channelId","0"); map.put("startNum","0"); presenter = new NewsPresenter(); presenter.attachView(this); presenter.getData(map,"http://www.93.gov.cn/"); } /** * 成功方法 * @param listNewsBean */ @Override public void onSuccessed(NewsBean<List<MsgBean>> listNewsBean) { List<MsgBean> data = listNewsBean.getData(); LinearLayoutManager manager = new LinearLayoutManager(this); recy 4000 clerView.setLayoutManager(manager); adapter = new RVAdapter(MainActivity.this,data); recyclerView.setAdapter(adapter); } @Override public void onFailed(Exception e) { } /** * 防止内存泄漏 */ @Override protected void onDestroy() { super.onDestroy(); if (presenter!=null){ presenter.detachView(); } } }recycleview子布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:fresco="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:padding="20dp" android:layout_height="match_parent"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/img_logo" android:layout_alignParentRight="true" fresco:roundAsCircle="true" android:layout_width="70dp" android:layout_height="70dp" /> <TextView android:id="@+id/tv_title" android:layout_width="match_parent" android:textSize="22dp" android:text="标题" android:layout_toLeftOf="@id/img_logo" android:layout_height="70dp" /> </RelativeLayout>recycleview适配器
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.ViewHolder>{ private Context context; private List<MsgBean> data; public RVAdapter(Context context, List<MsgBean> data) { this.context = context; this.data = data; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.item, null); ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.tvTitle.setText(data.get(position).getTitle()); holder.imgLogo.setImageURI(data.get(position).getImageUrl()); } @Override public int getItemCount() { return data.size(); } class ViewHolder extends RecyclerView.ViewHolder{ private final TextView tvTitle; private final SimpleDraweeView imgLogo; public ViewHolder(View itemView) { super(itemView); tvTitle = (TextView) itemView.findViewById(R.id.tv_title); imgLogo = (SimpleDraweeView) itemView.findViewById(R.id.img_logo); } } }此框架暂不完美,Loading...
相关文章推荐
- MVP模式使用Retrofit+RxJAVA请求数据实现购物车
- rxjava+retrofit+okhttp+mvp 简单实践
- RxJava+Retrofit+Mvp实现购物车(没有结算页面)
- Rxjava+Retrofit+Mvp的使用实例(基于retrofit2.1.0)
- Rxjava2+MVP+Retrofit2关系图
- MVP+Retrofit(拦截器)+RXjava,自适用
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
- RxJava+Retrofit+OkHttp深入浅出-mvp(使用篇)
- 爱吖妹纸——Retrofit + RxJava + MVP 架构 APP 体验代码家的干货集中营 Gank.io,福利多多,不容错过
- kotlin+Rxjava+retrofit搭建MVP模式
- 一款在线视频 App,基于 Material Design + MVP + RxJava + Retrofit + Realm + Glide
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- 一款纯粹的在线视频App,基于Material Design + MVP + RxJava + Retrofit + Realm
- MVP架构下Android的Rxjava与Retrofit 结合
- RxJava+okhttp+Retrofit+Mvp 的封装
- Android 搭建MVP+Retrofit+RxJava网络请求框架
- mvp+rxjava+retrofit+okhttp
- 82.Android之MVP+Retrofit+RxJava实践小结
- Android从零开搞系列:网络框架系列(4)Retrofit+RxJava+MVP(中-上)RxJava篇(上)
- Retrofit+RxJava+Fresco+MVP