MVP+Retrofit2+Okhttp3

先写一个baseAPI

//存储地址
public class BaseApi {
    public static String BaseUrl = "http://www.tv188.com/";

    //Retrofit_banner
    public static final String Retrofit_Banner = "mobile/listSlides.do";
    //Retrofit_login
    public static final String Retrofit_Login = "mblogin.do";
}
RetrofitContract
public interface RetrofitContract {

    interface View extends BaseView{
        void bannerData(List<banner> list);
        void bannerDateTwo(List<bannertwo.databean> list);
        void usetLogin();
    }

    abstract class presenter extends BasePresenter<View>{
        public abstract void getBannerData();
        public abstract void getBannerDataTwo();
        public abstract void userLogin(String user,String pwd,String code);
    }
}

 

/**
 * Presenter的父类
 * */
public abstract class BasePresenter<T>  {
    public Context context;
    //public E mModel;
    public T mView;

    public BasePresenter(){

    }

    public void setVM(Context context,T mView){
        this.context = context;
        //this.mModel = mModel;
        this.mView = mView;
    }

}

  

//用来回调接口成功失败
public interface BaseView {
    void showMsg(String msg);
    void showLoading();
    void stopLoading();
    //void success(Object o,int type);
    void failure();
}

  

//存放Demo模块,API

public interface RetrofitApi {
     /**
      * banner 第一种
      * */
    @GET(BaseApi.Retrofit_Banner)
    Observable<BaseEntry<List<banner>>> getBanner();

     /**
      * 自己尝试 banner
      * */
     @GET(BaseApi.Retrofit_Banner)
     Observable<bannertwo> getBannerTwo();

    /**
     * 登录
     */
    @POST(BaseApi.Retrofit_Login)
    Observable<BaseEntry<login>> userLogin(@Body Map<String,String> maps);
}

  

/**
 * Retrofit2+Rxjava2+OKHttp3+RxAndroid网络框架
 */

public class RetrofitActivity extends AppCompatActivity implements RetrofitContract.View {

    private RetrofitPresenter presenter;
    @BindView(R.id.tv_banner)
    TextView tv_banner;
    @BindView(R.id.bt_banner)
    Button bt_banner;
    @BindView(R.id.tv_bannertwo)
    TextView tv_bannertwo;
    @BindView(R.id.bt_bannertwo)
    Button bt_bannertwo;
    @BindView(R.id.tv_bannerthree)
    TextView tv_bannerthree;
    @BindView(R.id.bt_bannerthree)
    Button bt_bannerthree;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_retrofit);
        ButterKnife.bind(this);
        presenter = new RetrofitPresenter();
        presenter.setVM(this,this);
        init();
    }

    private void init() {
        //获取banner数据
        bt_banner.setOnClickListener(v -> {
            presenter.getBannerData();
        });
        //第二种获取banner
        bt_bannertwo.setOnClickListener(v -> {
            presenter.getBannerDataTwo();
        });
        //登录
        bt_bannerthree.setOnClickListener(v -> {
            //登录信息
            presenter.userLogin("allen234", "allen234", "111");
        });
    }

    @Override
    public void bannerData(List<banner> list) {
        tv_banner.setText(list.get(0).getTitle());
    }

    @Override
    public void bannerDateTwo(List<bannertwo.databean> list) {
        tv_bannertwo.setText(list.get(1).getTitle());
    }

    @Override
    public void usetLogin() {

    }

    @Override
    public void showMsg(String msg) {

    }

    @Override
    public void showLoading() {

    }

    @Override
    public void stopLoading() {

    }

    @Override
    public void failure() {

    }
}

  

//Retrofit 请求工具类

public class RetrofitUtil<T> {
    /**
     * 超时时间
     */
    private static volatile RetrofitUtil mInstance;
    private RetrofitApi allApi;

    /**
     * 单例封装
     *
     * @return
     */
    public static RetrofitUtil getInstance() {
        if (mInstance == null) {
            synchronized (RetrofitUtil.class) {
                if (mInstance == null) {
                    mInstance = new RetrofitUtil();
                }
            }
        }
        return mInstance;
    }

    /**
     * 初始化Retrofit
     */
    public RetrofitApi initRetrofit() {
        if (allApi == null) {
            Retrofit mRetrofit = new Retrofit.Builder()
                    .client(MyApplication.initOKHttp())
                    // 设置请求的域名
                    .baseUrl(BaseApi.BaseUrl)
                    // 设置解析转换工厂,用自己定义的
                    .addConverterFactory(GsonConverterFactory.create())
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .build();
            allApi = mRetrofit.create(RetrofitApi.class);
        }
        return allApi;
    }
}

  

public class RetrofitPresenter extends RetrofitContract.presenter {

    /**
     * 获取banner 第一种
     * */
    @Override
    public void getBannerData() {
        RetrofitUtil.getInstance().initRetrofit().getBanner()
                .subscribeOn(Schedulers.io())//执行在io线程
                .observeOn(AndroidSchedulers.mainThread())//主线程
                .subscribe(new Observer<BaseEntry<List<banner>>>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(BaseEntry<List<banner>> value) {
                        System.out.println(value.getData());
                        mView.bannerData(value.getData());
                    }

                    @Override
                    public void onError(Throwable e) {
                        mView.showMsg(e.getMessage());
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    @Override
    public void getBannerDataTwo() {
        //第二种
        RetrofitUtil.getInstance().initRetrofit().getBannerTwo()
                .subscribeOn(Schedulers.io())//执行在io线程
                .observeOn(AndroidSchedulers.mainThread())//主线程
                .subscribe(new Observer<bannertwo>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(bannertwo value) {
                       mView.bannerDateTwo(value.getData());
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    /***
     * 登录
     */
    @Override
    public void userLogin(String user, String pwd, String code) {
        Map<String,String> map=new HashMap<>();
        map.put("userName",user);
        map.put("userPwd",pwd);
        map.put("verifyCode",code);
        RetrofitUtil.getInstance().initRetrofit().userLogin(map)
                .subscribeOn(Schedulers.io())//执行在io线程
                .observeOn(AndroidSchedulers.mainThread())//主线程
                .subscribe(new Observer<BaseEntry<login>>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(BaseEntry<login> value) {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });
    }
}

  

public class MyApplication extends Application {
    public static MyApplication myApplication;
    public static final int TIMEOUT = 60;
    private static OkHttpClient mOkHttpClient;

    @Override
    public void onCreate() {
        super.onCreate();
        myApplication = this;
    }

    /**
     * 全局httpclient
     */
    public static OkHttpClient initOKHttp() {
        if (mOkHttpClient == null) {
            mOkHttpClient = new OkHttpClient.Builder()
                    .connectTimeout(TIMEOUT, TimeUnit.SECONDS)//设置连接超时时间
                    .readTimeout(TIMEOUT, TimeUnit.SECONDS)//设置读取超时时间
                    .writeTimeout(TIMEOUT, TimeUnit.SECONDS)//设置写入超时时间
                    .addInterceptor(InterceptorUtil.LogInterceptor())//添加日志拦截器
                    .build();
        }
        return mOkHttpClient;
    }
}

  

 

posted on 2019-02-25 09:52  爱学习的亮亮  阅读(354)  评论(0)    收藏  举报

导航