Retrofit+RxJava+MVP

//效果图
//Rxjava+ok+Retrofit2.0依赖

implementation 'io.reactivex:rxjava:1.1.0'
implementation 'io.reactivex:rxandroid:1.1.0'
implementation'com.squareup.retrofit2:adapter-rxjava:2.0.2
implementation 'com.squareup.okhttp3:okhttp:3.4.1'
implementation 'com.squareup.retrofit2:retrofit:2.1.0'
//ApiService

package com.example.utils;

import com.example.pojo.GoodsBean;

import retrofit2.http.GET;
import rx.Observable;

public interface GoodsApi {
    @GET("ad/getAd")
    /*Call<GoodsBean> rxGoods();*/
    Observable<GoodsBean> rxGoods();
}
//Rtrofit工具类

package com.example.utils;


import java.util.concurrent.TimeUnit;

import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * Retofit网络请求工具类
 * Created by HDL on 2016/7/29.
 */
public class RetrofitUtils {
    private static final int READ_TIMEOUT = 60;//读取超时时间,单位  秒
    private static final int CONN_TIMEOUT = 12;//连接超时时间,单位  秒

    private static Retrofit mRetrofit;

    private RetrofitUtils() {

    }

    public static Retrofit newInstence(String url) {
        mRetrofit = null;
        OkHttpClient client = new OkHttpClient();//初始化一个client,不然retrofit会自己默认添加一个
        client.newBuilder()
                .readTimeout(READ_TIMEOUT, TimeUnit.MINUTES)//设置读取时间为一分钟
                .connectTimeout(CONN_TIMEOUT, TimeUnit.SECONDS);//设置连接时间为12s
        mRetrofit = new Retrofit.Builder()
                .client(client)//添加一个client,不然retrofit会自己默认添加一个
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
        return mRetrofit;
    }
}

//View层

package com.example.mvp.goods_contract;

import com.example.pojo.GoodsBean;
import com.example.utils.OnHttpCallBack;

import java.util.List;

public interface Goods_Contract {
    interface Model {
        void setUrl(String base, String mulu , GetDataState getDataState);
    }
    interface GetDataState{
        void onSuccess(List<GoodsBean.TuijianBean.ListBean> list);
        void onFaild(String errorMsg);//失败了就调用这个方法,可以传递错误的请求消息给调用者
    }
    interface View {
        void onSuccess(List<GoodsBean.TuijianBean.ListBean> list);
        void onFaild(String errorMsg);//失败了就调用这个方法,可以传递错误的请求消息给调用者
    }

    interface Presenter {
        void setUrl(String base,String mulu);
    }
}
//Presenter层

package com.example.mvp.goods_presenter;

import com.example.mvp.goods_contract.Goods_Contract;
import com.example.mvp.goods_model.Goods_Model;
import com.example.pojo.GoodsBean;

import java.util.List;

public class Goods_Presenter implements Goods_Contract.Presenter, Goods_Contract.GetDataState {
    private  Goods_Contract.View view;
    private  Goods_Contract.Model model;

    public Goods_Presenter(Goods_Contract.View view) {
        this.view = view;
        model = new Goods_Model();
    }

    @Override
    public void setUrl(String base, String mulu) {
        model.setUrl(base,mulu,this);
    }

    @Override
    public void onSuccess(List<GoodsBean.TuijianBean.ListBean> list) {
        view.onSuccess(list);
    }


    @Override
    public void onFaild(String errorMsg) {
        view.onFaild(errorMsg);
    }
}

//Model层

package com.example.mvp.goods_model;

import com.example.mvp.goods_contract.Goods_Contract;
import com.example.pojo.GoodsBean;
import com.example.utils.GoodsApi;
import com.example.utils.RetrofitUtils;
import com.socks.library.KLog;

import java.net.ConnectException;
import java.net.SocketTimeoutException;

import retrofit2.adapter.rxjava.HttpException;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

public class Goods_Model implements Goods_Contract.Model {
    @Override
    public void setUrl(String url, String mulu, final Goods_Contract.GetDataState callBack) {
        //登录的网络请求
        RetrofitUtils.newInstence(url)//实例化Retrofit对象
                .create(GoodsApi.class)//创建Rxjava---->LoginService对象
                .rxGoods()
                .subscribeOn(Schedulers.newThread())//在新线程中执行登录请求
                .observeOn(AndroidSchedulers.mainThread())//在主线程中执行
                .subscribe(new Subscriber<GoodsBean>() {//网络(登录)请求回调
                    @Override
                    public void onCompleted() {
                        //完成的时候调用
                    }

                    @Override
                    public void onError(Throwable e) {
                        KLog.e(e.getMessage() + "--");
                        e.printStackTrace();
                        //失败的时候调用-----一下可以忽略 直接 callBack.onFaild("请求失败");
                        if (e instanceof HttpException) {
                            HttpException httpException = (HttpException) e;
                            //httpException.response().errorBody().string()
                            int code = httpException.code();
                            if (code == 500 || code == 404) {
                                callBack.onFaild("服务器出错");
                            }
                        } else if (e instanceof ConnectException) {
                            callBack.onFaild("网络断开,请打开网络!");
                        } else if (e instanceof SocketTimeoutException) {
                            callBack.onFaild("网络连接超时!!");
                        } else {
                            callBack.onFaild("发生未知错误" + e.getMessage());
                            KLog.e("Myloy", e.getMessage());
                        }
                    }

                    @Override
                    public void onNext(GoodsBean goodsBean) {
                        callBack.onSuccess(goodsBean.getTuijian().getList());
                    }
                });
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值