RxJava2+MVP+Retrofit框架简单实现RecyclerView
来源:互联网 发布:怎么看淘宝注册的时间 编辑:程序博客网 时间:2024/05/17 18:00
导入依赖:
compile 'com.squareup.retrofit2:retrofit:2.1.0'compile "io.reactivex.rxjava2:rxjava:2.1.1"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'compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'权限:
<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
先封装一个Retrofie
public class RetrofitUtil { private static volatile RetrofitUtil instance; private final Retrofit retrofit; private final ApiServence servence; private RetrofitUtil(){ retrofit = new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .baseUrl("固定接口") .build(); servence = retrofit.create(ApiServence.class); } public static RetrofitUtil getInstance(){ if(instance == null){ synchronized (RetrofitUtil.class){ if(null == instance){ instance = new RetrofitUtil(); } } } return instance; } public ApiServence getServence(){ return servence; } }一个ApiServence接口进行拼接url
首先是M层:public interface ApiServence { @GET("getAddrs") Flowable<MessageBean<List<ShowBean>>> getShow(@QueryMap Map<String,String> map);}
接口:
public interface IModel { void getData(Map<String,String>map);}M层实例实现接口:
public class MyModel implements IModel { private MyPresenter presenter; public MyModel(MyPresenter presenter){ this.presenter = presenter; } @Override public void getData(Map<String, String> map) { Flowable<MessageBean<List<ShowBean>>> show = RetrofitUtil.getInstance().getServence().getShow(map); presenter.getShow(show); }}然后是P层:
接口:
public interface BasePresenter { void getData(Map<String,String> map);}P层实例实现接口:
public class MyPresenter implements BasePresenter { private DisposableSubscriber<MessageBean<List<ShowBean>>> disposableSubscriber; private MyView iv; public void attachView(MyView iv){ this.iv = iv; } public void datchView(){ if(iv != null){ iv = null; } } @Override public void getData(Map<String, String> map) { IModel model = new MyModel(this); model.getData(map); } public void getShow(Flowable<MessageBean<List<ShowBean>>> flowable){ disposableSubscriber = flowable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeWith(new DisposableSubscriber<MessageBean<List<ShowBean>>>() { @Override public void onNext(MessageBean<List<ShowBean>> listMessageBean) { if(listMessageBean != null){ List<ShowBean> data = listMessageBean.getData(); if(data != null){ iv.onSuccess(data); } } } @Override public void onError(Throwable t) { iv.onFailed(new Exception(t)); } @Override public void onComplete() { } }); }}最后是V层
接口:
public interface MyView { void onSuccess(Object o); void onFailed(Exception e);}V层实例Activity实心接口:
public class MainActivity extends AppCompatActivity implements MyView{ private RecyclerView rvShow; private ShowAdapter adapter; private MyPresenter presenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rvShow = (RecyclerView) findViewById(R.id.rv_show); rvShow.setLayoutManager(new LinearLayoutManager(this)); //拼接url Map<String,String> map = new HashMap<>(); map.put("uid","71"); presenter = new MyPresenter(); presenter.getData(map); presenter.attachView(this); } @Override public void onSuccess(Object o) { if(o instanceof List){ List<ShowBean> list = (List<ShowBean>) o; adapter = new ShowAdapter(MainActivity.this,list); rvShow.setAdapter(adapter); adapter.notifyDataSetChanged(); } } @Override public void onFailed(Exception e) { } @Override protected void onDestroy() { super.onDestroy(); if(presenter != null){ presenter.datchView(); } }}当然,既然是用RecyclerView,不要忘了适配器:
public class ShowAdapter extends RecyclerView.Adapter<ShowAdapter.MyViewHolder> { private Context context; private List<ShowBean> list; public ShowAdapter(Context context, List<ShowBean> list) { this.context = context; this.list = list; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.layout_zi, null); MyViewHolder holder = new MyViewHolder(view); return holder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.txtShow.setText(list.get(position).getName()); } @Override public int getItemCount() { return list.size(); } class MyViewHolder extends RecyclerView.ViewHolder { private TextView txtShow; public MyViewHolder(View itemView) { super(itemView); txtShow = itemView.findViewById(R.id.txt_show); } }}这样是实现了一个简单的RecyclerView布局
阅读全文
0 0
- RxJava2+MVP+Retrofit框架简单实现RecyclerView
- (安卓) MVP 框架 (Rxjava2+Retrofit)结合 实现网络请求
- MVP+Retrofit+RecyclerView实现加载网络数据
- MVP-Dagger2-Rxjava2-Retrofit整合
- Rxjava2配合Retrofit加MVP
- Mvp+Rxandroid+Retrofit的简单实现
- 简单实现断点续传+MVP+Retrofit+RxJava
- MVP+Rxjava+Fresco+Retrofit实现Recyclerview列表展示
- MVP+Dragger2+Rxjava2+Retrofit+OKhttp进行开发。
- Dagger2+Rxjava2+Retrofit+MVP小案例
- 使用Rxjava2+Retrofit实现简单的快递查询
- MVP+Retrofit+RxJava+fresco+RecyclerView
- mvp+rxjava2+retrofit2项目框架
- Mvp+rxjava2+Retrofit2 结构框架
- RxJava+Retrofit+MVP框架
- MVP简单实现OKHttp+recyclerview+springview
- RxJava2+retrofit实现网络封装
- Retrofit+mvp简单实例
- 搭建zimg 高可用图片服务器
- 关于XMLHttpRequest.open()设置提交方式 (POST,GET)
- AngularJS中控制器之间通信方法
- 变量及其传递
- 多行数据用json格式插入到一个字段中,然后再分别显示在不同表格增删改查
- RxJava2+MVP+Retrofit框架简单实现RecyclerView
- jquery实现input输入框输入值自动智能提示的实现
- 使用Jekyll和github搭建个人博客
- DHCP搭建
- 图文详解YUV420数据格式
- 只有在潮水退去时,你才会知道谁一直在裸泳
- angularJS中的父子作用域和兄弟作用域,以及父子,兄弟controller通信机制
- 2017-12-8又半途而废,接下去怎么办
- 什么是数据流图 Data Flow Diagram (DFD)