Android_Retrofit+RxJava+MVP开发模式案例
来源:互联网 发布:java 贪吃蛇程序源代码 编辑:程序博客网 时间:2024/05/21 22:22
MVP:高内聚,低耦合
一:导入依赖
compile 'io.reactivex.rxjava2:rxjava:2.1.1'compile 'io.reactivex.rxjava2:rxandroid:2.0.1'compile 'com.squareup.retrofit2:retrofit:2.0.0'compile 'com.squareup.retrofit2:converter-gson:2.0.2'//解析使用compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'//与RxJava结合时使用
二:请求网络用Retrofit
1:接口
public interface ApiService { //http://120.27.23.105/product/getProductCatagory?cid=1 @GET("product/getProductCatagory") Flowable<Bean> get(@QueryMap Map<String,String> map);}
package com.example.rxretrofitmvp.utils;import retrofit2.Retrofit;import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;import retrofit2.converter.gson.GsonConverterFactory;/** * Created by Administrator on 2017/12/7 0007. */public class RetrofitUtils { private static volatile RetrofitUtils instance; private final Retrofit retrofit; private RetrofitUtils(String baseurl) { retrofit = new Retrofit.Builder() .baseUrl(baseurl) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build(); } public static RetrofitUtils getInstance(String baseurl) { if (instance == null) { synchronized (RetrofitUtils.class) { if (instance == null) { instance = new RetrofitUtils(baseurl); } } } return instance; } public Retrofit getretrofit(){ return retrofit; }}
三:Model层
1:接口
public interface IModel { void get(String baseurl,Map<String,String> map);}
2:类
package com.example.rxretrofitmvp.model;import com.example.rxretrofitmvp.bean.Bean;import com.example.rxretrofitmvp.presenter.Presenter;import com.example.rxretrofitmvp.utils.ApiService;import com.example.rxretrofitmvp.utils.RetrofitUtils;import java.util.Map;import io.reactivex.Flowable;/** * Created by Administrator on 2017/12/7 0007. */public class Model implements IModel{ private Presenter presenter; public Model(Presenter presenter) { this.presenter = presenter; } @Override public void get(String baseurl, Map<String, String> map) { Flowable<Bean> flowable = RetrofitUtils.getInstance(baseurl).getretrofit().create(ApiService.class).get(map); presenter.getData(flowable); }}
四:Presenter层
1:接口
public interface BasePresenter { void get(String baseurl,Map<String,String> map);}2:类
package com.example.rxretrofitmvp.presenter;import com.example.rxretrofitmvp.model.Model;import com.example.rxretrofitmvp.view.IView;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 Administrator on 2017/12/7 0007. */public class Presenter implements BasePresenter{ private IView iv; private DisposableSubscriber subscriber; public Presenter(IView iv) { this.iv = iv; } @Override public void get(String baseurl,Map<String, String> map) { Model model = new Model(this); model.get(baseurl,map); } public void getData(Flowable flowable){ subscriber = (DisposableSubscriber) flowable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeWith(new DisposableSubscriber() { @Override public void onNext(Object o) { iv.onSuccess(o); } @Override public void onError(Throwable t) { iv.onFailed((Exception) t); } @Override public void onComplete() { } }); } //防止内存泄漏 public void detatch(){ if (iv != null) { iv = null; } if(subscriber!=null){ if(!subscriber.isDisposed()){ subscriber.dispose(); } } }}
五:View层
1:接口
public interface IView { void onSuccess(Object o); void onFailed(Exception e);}2:类
package com.example.rxretrofitmvp.view;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import com.example.rxretrofitmvp.R;import com.example.rxretrofitmvp.bean.Bean;import com.example.rxretrofitmvp.presenter.Presenter;import java.util.HashMap;import java.util.List;import java.util.Map;public class MainActivity extends AppCompatActivity implements IView{ private Presenter presenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //http://120.27.23.105/product/getProductCatagory?cid=1 presenter = new Presenter(this); Map<String,String> map = new HashMap<>(); map.put("cid","1"); presenter.get("http://120.27.23.105/",map); } @Override public void onSuccess(Object o) { Bean b = (Bean)o; List<Bean.DataBean> data = b.getData(); Log.i("TAG",data.size()+""); } @Override public void onFailed(Exception e) { } @Override protected void onDestroy() { super.onDestroy(); presenter.detatch(); }}
阅读全文
1 0
- Android_Retrofit+RxJava+MVP开发模式案例
- RxJava+Retrofit2结合使用mvp模式开发框架
- Retrofit+RxJava+MVP模式使用
- 从小案例入手RxJava+Retrofit+MVP
- Android MVP+RxJava+retrofit 小案例
- MVP模式的RecyclerView案例
- Android RxJava+Retrofit2.0+MVP模式整合
- kotlin+Rxjava+retrofit搭建MVP模式
- MVP模式(Rxjava+retrofit+fresco)
- TLint for 虎扑体育 基于Dagger2+RxJava+Retrofit开发,采用MVP模式
- [Android 知识点] MVP+RxJava+Dagger开发框架
- RxJava+MVP
- Mvp-Rxjava
- Android MVP开发模式
- android MVP 开发模式
- Android mvp开发模式
- Android 开发MVP模式
- Android mvp开发模式
- android js webview 交互
- 字符替换-指针
- MySql 分页SQL 大数据量limit替代和优化(试验)
- 配置android开发环境
- java long Integer cannot be cast to java.util.Map
- Android_Retrofit+RxJava+MVP开发模式案例
- linux编译安装pahlcon报错
- 微信公众平台开发之分享问题总结
- 第一个博客
- C语言操作符总结2
- Unity实现手机录音功能
- 控件解析与实战
- java实现文件夹下解压jar包和zip包
- HDOJ 1033 Edge