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的简单封装》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

RabbitMQ实战

RabbitMQ实战

Alvaro Videla、Jason J. W. Williams / 汪佳南 / 电子工业出版社 / 2015-10 / 75.00元

本书对RabbitMQ做了全面、翔实的讲解,体现了两位专家的真知灼见。本书首先介绍了有关MQ的历史,然后从基本的消息通信原理讲起,带领读者一路探索RabbitMQ的消息通信世界。这当中不仅包含了针对单台RabbitMQ服务器和RabbitMQ集群的讲解,还教导读者如何使用各种工具来进行监控。 本书内容浅显易懂,文笔风趣幽默。书中包含了丰富的、可以运行的示例程序源代码,读者可以自行下载并运行,......一起来看看 《RabbitMQ实战》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具