总结项目中 retrofit 的架构

本文总结了项目中Retrofit的使用,包括其在框架中的核心作用、类结构设计。Api类作为对外统一接口,BaseApi封装了HTTP请求细节,如超时和日志。ApiService定义了服务器接口和请求参数,利用Gson处理JSON数据。通过反射机制,Retrofit生成代理对象,实现服务的响应式调用,便于扩展和维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

项目中用到了retrofit框架,retrofit在项目中框架的作用非常重要,所以想总结一下,方便以后自己搭框架时,能有更好的使用。

类结构

在这里插入图片描述

  • 其中Api类是对外提供统一访问接口,其亦是单例类
public class Api {

    private String baseUrl = "https://api.littleox.com/";//替换自己项目服务器端的地址

    private volatile static ApiService apiService;
    public static ApiService getApiService(){//这里采用了单例模式,双检查锁
        if(apiService == null){
            synchronized (Api.class){
                if(apiService == null){
                    new Api();
                }
            }
        }
        return apiService;
    }

    private Api(){
        BaseApi baseApi = new BaseApi();
        apiService = baseApi.getRetrofit(baseUrl).create(ApiService.class);
        // retrofit是通过反射机制来实例化对象。最终我们获取的是一个代理实现对象
    }
}

  • BaseApi类用来封装http请求的熟悉,比如超时、缓存、日志等。
/**
 * 网络对象层
 */
public class BaseApi {
/**
     * 使用OkHttp配置了超时及缓存策略的Retrofit
     *
     * @param baseUrl
     * @return retrofit
     */
    public Retrofit getRetrofit(String baseUrl) {
        HttpLoggingInterceptor logInterceptor = new HttpLoggingInterceptor();
        if (BuildConfig.DEBUG) {
            logInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        } else {
            logInterceptor.setLevel(HttpLoggingInterceptor.Level.NONE);
        }
        //缓存
        File cacheFile = new File(CmApplication.context().getCacheDir(), "cache");
        Cache cache = new Cache(cacheFile, 1024 * 1024 * 100); //100Mb

        //创建一个OkHttpClient并设置超时时间
        OkHttpClient client = new OkHttpClient.Builder()
                .readTimeout(READ_TIME_OUT, TimeUnit.SECONDS)
                .writeTimeout(READ_TIME_OUT, TimeUnit.SECONDS)
                .connectTimeout(CONNECT_TIME_OUT, TimeUnit.SECONDS)
                .addInterceptor(logInterceptor)
                .cache(cache)
                .build();

        Retrofit retrofit = new Retrofit.Builder()
                .client(client)
                .baseUrl(baseUrl)
                .addConverterFactory(ScalarsConverterFactory.create())//请求结果转换为基本类型,一般为String
                .addConverterFactory(GsonConverterFactory.create())//请求的结果转为实体类
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//适配RxJava2.0,
                // RxJava1.x则为RxJavaCallAdapterFactory.create()
                .build();
        return retrofit;

    }
}
  • ApiService定义了请求服务器的接口,和请求参数。由于目前主流的参数请求格式为json,所以上面的Retrofit转换工具为Gson,这样服务器发送过来的json字符数据就可以很好的转化为JAVA对象。发送到服务器的数据要进行转化,请求数据我们在项目中都是Java Bean对象,这些对象要转化为RequestBody对象:
    public static RequestBody createRequestBody(Map<String, String> params) {
//    params 的Map对象最好是 Map<String, Object>,因为我在项目中,服务器其中一些参数要求int型
        return RequestBody.create(MediaType.parse("Content-Type, application/json"),
                new JSONObject(params).toString());
    }
public interface ApiService {

    /**
     * 登录这里模拟表单数据提交,具体后台可以根据不同的方式去访问:POST GET DELETE HEAD PUT
     */
    @POST("login")
    Observable<LoginBean> login(@Body RequestBody body);
}
结语

整个结构是Api是外部调用服务的总接口,ApiService提供全部服务。他们是一对多的关系。
在这里插入图片描述当我们要添加新的服务器接口时,直接在ApiService中添加。调用端直接调用方法。这样我们添加方法时对其他地方没有影响,不必修改代码。

retrofit是通过反射机制来实现代理对象的生成。

接口返回的对象是Observable对象,是RXJava的范畴,这样我们就跟响应式编程联系在一起。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值