Retrofit的简单封装

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

内容简介:目前接口使用同异步的网络请求.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的简单封装》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Data Structures and Algorithms in Java

Data Structures and Algorithms in Java

Robert Lafore / Sams / 2002-11-06 / USD 64.99

Data Structures and Algorithms in Java, Second Edition is designed to be easy to read and understand although the topic itself is complicated. Algorithms are the procedures that software programs use......一起来看看 《Data Structures and Algorithms in Java》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

SHA 加密
SHA 加密

SHA 加密工具