依赖
//retrofit
compile 'com.squareup.retrofit2:retrofit:+'
compile 'com.squareup.retrofit2:converter-gson:+'
//Rxjava2
compile 'io.reactivex.rxjava2:rxjava:+'
compile 'io.reactivex.rxjava2:rxandroid:+'
//让retrofit支持Rxjava2
compile 'com.squareup.retrofit2:adapter-rxjava2:+'
refrofit工具类
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;
}
}
ApiService接口实体类
public interface ApiService {
@GET("http://120.27.23.105/ad/getAd")
Flowable<Bean> get(@QueryMap Map<String,String> map);
}
MainActivity(View层)
public class MainActivity extends AppCompatActivity implements IView{
private Presenter presenter;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = findViewById(R.id.tv);
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 bean = (Bean) o;
List<Bean.DataBean> data = bean.getData();
tv.setText(data.toString());
}
@Override
public void onFailed(Exception e) {
}
@Override
protected void onDestroy() {
super.onDestroy();
presenter.detatch();
}
}
V 层接口
public interface IView {
void onSuccess(Object o);
void onFailed(Exception e);
}
M层类
public class Model implements IModel {
private static final String TAG = "model";
private Presenter presenter;
public Model(Presenter presenter) {
this.presenter = presenter;
}
@Override
public void get(String baseurl, Map<String, String> map) {
Log.e(TAG, "model层 " + map.toString());
Flowable<Bean> flowable = RetrofitUtils.getInstance(baseurl).getretrofit().create(ApiService.class).get(map);
Log.e(TAG, "rxjava+retrofit请求数据 ");
presenter.getData(flowable);
}
}
M层接口
public interface IModel {
void get(String baseurl, Map<String,String> map);
}
P层类
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();
}
}
}
}
P层接口
public interface BasePresenter {
void get(String baseurl, Map<String,String> map);
}