Retrofit2+OkHttp3+RxJava网络请求封装

 

第一步:  添加依赖

//RxJava
implementation 'io.reactivex:rxjava:1.1.3'
//RxAndroid
implementation 'io.reactivex:rxandroid:1.1.0'
//retrofit
implementation 'com.squareup.retrofit2:retrofit:2.0.0'
//retrofit依赖Gson
implementation 'com.squareup.retrofit2:converter-gson:2.0.0'
//OkHttp
implementation 'com.squareup.okhttp3:okhttp:3.8.0'
//retrofit依赖RxJava
implementation 'com.squareup.retrofit2:adapter-rxjava:2.0.0'
//okhttp
implementation 'com.squareup.okhttp3:logging-interceptor:3.6.0'
//日志
implementation 'com.orhanobut:logger:2.2.0'

 

第二步:

RetrofitServiceManager
package com.example.myapplication;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.orhanobut.logger.Logger;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * Created by ShinnyYang on 2020/8/3.
 */
public class RetrofitServiceManager {
    private static final int DEFAULT_CONNECT_TIME = 12;
    private static final int DEFAULT_WRITE_TIME = 12;
    private static final int DEFAULT_READ_TIME = 12;
    private static OkHttpClient okHttpClient;
    private static final String REQUEST_PATH = "http://admin.qianduoduo.cy6.co";
    private static Retrofit retrofit;

    private RetrofitServiceManager() {

        retrofit = new Retrofit.Builder()
                .client(initOKHttp())//设置使用okhttp网络请求
                .baseUrl(REQUEST_PATH)//设置服务器路径
                .addConverterFactory(GsonConverterFactory.create())//添加转化库,默认是Gson
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//添加回调库,采用RxJava
                .build();
    }


    public static OkHttpClient initOKHttp() {
        if (okHttpClient == null) {
            HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(
                    new HttpLoggingInterceptor.Logger() {
                        @Override
                        public void log(String message) {
                            //防止&、=都被转义
                            Logger.e("okhttp==" + message);
                        }
                    }
            );
            loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

            okHttpClient = new OkHttpClient.Builder()
                    /*  .addInterceptor(new Interceptor() {
                          @Override
                          public Response intercept(Chain chain) throws IOException {
                              Request request = chain.request()
                                      .newBuilder()
                                      .addHeader("AuthToken", "")
                                      .build();
                              return chain.proceed(request);
                          }
                      })*/
                    .connectTimeout(12, TimeUnit.SECONDS)
                    .readTimeout(12, TimeUnit.SECONDS)
                    .writeTimeout(12, TimeUnit.SECONDS)
                    .addInterceptor(loggingInterceptor)
                    .build();
        }

        return okHttpClient;
    }


    private static class SingletonHolder {
        private static final RetrofitServiceManager INSTANCE = new RetrofitServiceManager();
    }

    /*
     * 获取RetrofitServiceManager
     **/
    public static RetrofitServiceManager getInstance() {
        return SingletonHolder.INSTANCE;
    }

    public  T create(Class service) {
        return retrofit.create(service);
    }
}

 

 

第三步:

AllApi

 

package com.example.myapplication;

import com.example.myapplication.bean.HomeListBean;

import java.util.Map;

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

/**
 * Created by ShinnyYang on 2020/8/3.
 */
public interface AllApi {
    @GET("/qddapiv2/index/list.php")
    Observable getHomeList(@QueryMap Map map);
}

 

第四步:

HttpModel

 

package com.example.myapplication;

import com.example.myapplication.bean.HomeListBean;

import java.util.Map;

import rx.Observable;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

/**
 * Created by ShinnyYang on 2020/8/3.
 */
public class HttpModel {

    private static AllApi movieService = RetrofitServiceManager.getInstance().create(AllApi.class);


    public static void getList(Map map,
                                    Observer observer) {
        setSubscribe(movieService.getHomeList(map), observer);
    }

    private static  void setSubscribe(Observable observable, Observer observer) {
        observable.subscribeOn(Schedulers.io())
                .subscribeOn(Schedulers.newThread())//子线程访问网络
                .observeOn(AndroidSchedulers.mainThread())//回调到主线程
                .subscribe(observer);
    }
}

 

第五步 :

private void getData() {

    Map map = new HashMap<>();
    map.put("page", "1");
    map.put("auth", "");
    map.put("time", "1596091163");
    map.put("token", "ZcfveU5pHeYiqH6lfvE9qeIquMPVGnSloW7TYnryFCI=");
    map.put("uid", "0730096");
    map.put("action", "margin");
    map.put("device_no", "ece430f2-cda1-4c5c-be1e-a0657395470e");

    HttpModel.getList(map, new Observer() {
                @Override
                public void onCompleted() {
                    Toast.makeText(getApplicationContext(), "onCompleted", Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onError(Throwable e) {
                    Logger.e("onError==>" + e.getMessage());
                }

                @Override
                public void onNext(HomeListBean homeListBean) {
                    Logger.e("onSuccess==>" + homeListBean.toString());
                }
            });
}

 

实体bean

 

package com.example.myapplication.bean;

import java.util.List;


public class HomeListBean {

    /**
     * status : 1
     * time : 1595819291
     * pagenum : 1
     * data : [{"task_id":"254","type_id":"11","thumb":"http://admin.qianduoduo.cy6.co/api/img/5.png","title":"999999999999999","unit_price":"400.00","num":"12","is_jingpin":"0","margin_per":1,"finish":2,"type_name":"微信转发","extra":"75"}]
     * msg : 查询成功
     */

    private int status;
    private int time;
    private int pagenum;
    private String msg;
    private List data;

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public int getTime() {
        return time;
    }

    public void setTime(int time) {
        this.time = time;
    }

    public int getPagenum() {
        return pagenum;
    }

    public void setPagenum(int pagenum) {
        this.pagenum = pagenum;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public List getData() {
        return data;
    }

    public void setData(List data) {
        this.data = data;
    }


    @Override
    public String toString() {
        return "HomeListBean{" +
                "status=" + status +
                ", time=" + time +
                ", pagenum=" + pagenum +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }

    public static class DataBean {
        /**
         * task_id : 254
         * type_id : 11
         * thumb : http://admin.qianduoduo.cy6.co/api/img/5.png
         * title : 999999999999999
         * unit_price : 400.00
         * num : 12
         * is_jingpin : 0
         * margin_per : 1
         * finish : 2
         * type_name : 微信转发
         * extra : 75
         */

        private String task_id;
        private String type_id;
        private String thumb;
        private String title;
        private String unit_price;
        private String num;
        private String is_jingpin;
        private int margin_per;
        private int finish;
        private String type_name;
        private String extra;


        @Override
        public String toString() {
            return "DataBean{" +
                    "task_id='" + task_id + '\'' +
                    ", type_id='" + type_id + '\'' +
                    ", thumb='" + thumb + '\'' +
                    ", title='" + title + '\'' +
                    ", unit_price='" + unit_price + '\'' +
                    ", num='" + num + '\'' +
                    ", is_jingpin='" + is_jingpin + '\'' +
                    ", margin_per=" + margin_per +
                    ", finish=" + finish +
                    ", type_name='" + type_name + '\'' +
                    ", extra='" + extra + '\'' +
                    '}';
        }

        public String getTask_id() {
            return task_id;
        }

        public void setTask_id(String task_id) {
            this.task_id = task_id;
        }

        public String getType_id() {
            return type_id;
        }

        public void setType_id(String type_id) {
            this.type_id = type_id;
        }

        public String getThumb() {
            return thumb;
        }

        public void setThumb(String thumb) {
            this.thumb = thumb;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getUnit_price() {
            return unit_price;
        }

        public void setUnit_price(String unit_price) {
            this.unit_price = unit_price;
        }

        public String getNum() {
            return num;
        }

        public void setNum(String num) {
            this.num = num;
        }

        public String getIs_jingpin() {
            return is_jingpin;
        }

        public void setIs_jingpin(String is_jingpin) {
            this.is_jingpin = is_jingpin;
        }

        public int getMargin_per() {
            return margin_per;
        }

        public void setMargin_per(int margin_per) {
            this.margin_per = margin_per;
        }

        public int getFinish() {
            return finish;
        }

        public void setFinish(int finish) {
            this.finish = finish;
        }

        public String getType_name() {
            return type_name;
        }

        public void setType_name(String type_name) {
            this.type_name = type_name;
        }

        public String getExtra() {
            return extra;
        }

        public void setExtra(String extra) {
            this.extra = extra;
        }
    }
}

 

 

  完成!!!!!

常用的注解:

@GET GET请求方式

@POST POST请求方式

@Query GET请求参数

@Header用来添加Header请求头

@FormUrlEncoded post请求头标示 其他注解请求方式:

@PUT 表示这是一个PUT请求

@DELETE 表示这是一个DELETE请求

@HEAD 表示这是一个HEAD请求

@OPTIONS 表示这是一个OPTION请求

@PATCH 表示这是一个PAT请求

你可能感兴趣的:(android)