Retrofit的简单封装

栏目: Android · 发布时间: 5年前

内容简介:目前接口使用同异步的网络请求.enqueue();直接调用 Server.getModuleList()方法就可以在使用过程中可以根据需求调整
Retrofit的简单封装
  • RequestData:网络返回的数据
  • Http:retrofit的网络实例化
  • RetrofitService:网络的接口注解显示
  • Server:网络接口的调用显示
  • SSLSocketFactoryUtils:https的处理

1.配置build.gradle

implementation 'com.squareup.retrofit2:retrofit:2.4.0'
//okhttp3的日志打印
implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0'
//retrofit的gson解析
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
复制代码

2.新建网络返回数据RequestData

public class RequestData {
    private String msg;
    private int status;
    private ArrayList<Data> data;

    public String getMsg() {
        return msg;
    }

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

    public int getStatus() {
        return status;
    }

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

    public ArrayList<Data> getData() {
        return data;
    }

    public void setData(ArrayList<Data> data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return "msg = " + msg + "status = " + status;
    }
}
复制代码

3.添加https的校验

public class SSLSocketFactoryUtils {
    /*
     * 默认信任所有的证书
     * */
    public static SSLSocketFactory createSSLSocketFactory() {
        SSLSocketFactory sslSocketFactory = null;
        try {
            SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, new TrustManager[]{createTrustAllManager()}, new SecureRandom());
            sslSocketFactory = sslContext.getSocketFactory();
        } catch (Exception e) {

        }
        return sslSocketFactory;
    }

    public static X509TrustManager createTrustAllManager() {
        X509TrustManager tm = null;
        try {

            tm =   new X509TrustManager() {
                public void checkClientTrusted(X509Certificate[] chain, String authType)
                        throws CertificateException {
                    //do nothing,接受任意客户端证书
                }

                public void checkServerTrusted(X509Certificate[] chain, String authType)
                        throws CertificateException {
                    //do nothing,接受任意服务端证书
                }

                public X509Certificate[] getAcceptedIssuers() {
                    return new X509Certificate[0];
                }
            };
        } catch (Exception e) {

        }
        return tm;
    }
}
复制代码

4.实例化Retrofit

public class Http {
    private static Http mInstance;

    //单利模式
    public static Http getInstance() {
        if (mInstance == null) {
            synchronized (Http.class) {
                if (mInstance == null) {
                    mInstance = new Http();
                }
            }
        }
        return mInstance;
    }

    public Retrofit getRetrofit(){
        HttpLoggingInterceptor loggingInterceptor;
        //打印网络请求相关日志
        loggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
            @Override
            public void log(String message) {
                //打印retrofit日志
                Log.i("retrofitLog: ", message);
            }
        });
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

        //为了打印日志,需要配置OkHttpClient
        OkHttpClient client = new OkHttpClient.Builder()
                //配置SSlSocketFactory
                .sslSocketFactory(SSLSocketFactoryUtils.createSSLSocketFactory())
                .addInterceptor(loggingInterceptor)
                .build();

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Config.DOMAIN) // 设置 网络请求 Url
                .client(client)
                .addConverterFactory(GsonConverterFactory.create()) //设置使用Gson解析(记得加入依赖)
                .build();

        return retrofit;
    }

    public RetrofitService getRetrofitService(){
        return getInstance().getRetrofit().create(RetrofitService.class);
    }
}
复制代码

5.初始化RetrofitService接口注解

public interface RetrofitService {
    @GET("/api/user/modules")
    Call<RequestData> getModuleList(@Query("token") String token);

    @GET("/api/user/logout")
    Call<RequestData> logOutRequest(@Query("token") String token);
}
复制代码

6.外部调用接口

public class Server {
    public static void getModuleList(String token,Callback<RequestData> callback){
        Http.getInstance().getRetrofitService().getModuleList(token).enqueue(callback);
    }

    public static void logOutRequest(String token,Callback<RequestData> callback){
        Http.getInstance().getRetrofitService().logOutRequest(token).enqueue(callback);
    }
}
复制代码

目前接口使用同异步的网络请求.enqueue();

直接调用 Server.getModuleList()方法就可以

在使用过程中可以根据需求调整


以上所述就是小编给大家介绍的《Retrofit的简单封装》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

科学计算导论

科学计算导论

希思 / 清华大学出版社 / 2005-10 / 48.00元

本书全面地介绍了科学计算中解各种主要问题的数值方法,包括线性和非线性方程、最小二乘法、特征值、最优化、插值、积分、常微分方程和偏微分方程、快速傅里叶变换和随机数生成。 本书的特点是: 以使用算法的读者为对象,重点讲授算法背后的思想和原理,而不是算法的详细分析。 强调敏感性和病态性等概念,对同一问题的不同算法进行比较和评价,提高读者对算法的鉴赏能力。 对每类......一起来看看 《科学计算导论》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具