NELA的博客

android学习历程心得

Retrofit 使用技巧

Retrofit 使用技巧

  1. 创建工厂类

、、、

public class RetrofitFactory {
    private static String baseUrl = "BaseURL/";

    private static Retrofit GsonRetrofit = new Retrofit.Builder()
            .baseUrl(baseUrl)

            //TOdo 添加转换器配置
            .addConverterFactory(GsonConverterFactory.create(GsonFactory.getgson()))
            .build();


    //解析返回的字符串
    public static LogInService getStringService() {
        LogInService service = GsonRetrofit.create(LogInService.class);
        return service;
    }


}
 //retrofit底层用的okHttp,所以设置超时还需要okHttp
 //然后设置5秒超时
 //其中DEFAULT_TIMEOUT是我这边定义的一个常量
 //TimeUnit为java.util.concurrent包下的时间单位
 //TimeUnit.SECONDS这里为秒的单位
 OkHttpClient client = new OkHttpClient.Builder()
    .connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
      .writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
       .readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
                        .build();

  //构建Retrofit对象
  //然后将刚才设置好的okHttp对象,通过retrofit.client()方法 设置到retrofit中去
    retrofit = new Retrofit.Builder().baseUrl(baseUrl)
    .addConverterFactory(GsonConverterFactory.create()).client(client).build();    

、、、
2. 通过泛型和注解方式配置参数
、、、

public interface LogInService {
    @GET("/auth/login")
    Call<LogInRequestBean> login(@Query("mail") String mail,
                                 @Query("secret") String secret,
                                 @Query("device") String device);

    @GET("/auth/check")
    Call<CheckBean> check(@Query("mail") String mail);

    @GET("/auth/register")
    Call<LogInRequestBean> register(@Query("mail") String mail,
                                    @Query("secret") String secret,
                                    @Query("code") String code,
                                    @Query("device") String device);

    @GET("/auth/refresh")
    Call<LogInRequestBean> refresh(@Query("mail") String mail,
                                   @Query("refresh_token") String refresh_token,
                                   @Query("device") String device);

}

、、、
3. 生成转换后的bean 使用gsonformat(必要值可定义枚举)
4.创建requestManager统一处理网络请求
、、、
public class RequestManager {

/**
 * 重置密码
 *
 * @param email
 * @param password
 * @param deviceID
 */
public static void register(String email, String password, String code, String deviceID) {
    Call<LogInRequestBean> call = RetrofitFactory.getStringService().register(email, password, code, deviceID);
    if (call != null) {
        call.enqueue(new Callback<LogInRequestBean>() {
            @Override
            public void onResponse(Call<LogInRequestBean> call, Response<LogInRequestBean> response) {
                if (response.code() == 200) {
                    //TODO 记录当前用户类型
                    //todo 记录"accessToken": "string", "expiresIn": 0,"refreshToken": "string",
                    LogInRequestBean logInRequestBean = response.body();
                    //todo 登陆成功
                    EventBus.getDefault().post(new CTLoginEvent(CTEvent.TYPE_LOGIN, true, CTLoginEvent.REASON_NONE));

                }
                //todo 登陆失败
                else {
                    EventBus.getDefault().post(new CTLoginEvent(CTEvent.TYPE_LOGIN, false, CTLoginEvent.REASON_INVALID_PARAM));

                }


            }

            @Override
            public void onFailure(Call<LogInRequestBean> call, Throwable t) {
                //todo 网络失败
            }
        });
    }
}

}

、、、
5. 处理逻辑此处应特别注意,不应该在manager中拆开response,只需将response传递给请求方即可。
6. 和EventBus结合即可将对象在回传事件时传递给请求调起方

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cuizehui123/article/details/79980949
所属专栏: Android_开源框架_从0-1
上一篇Android 面试题总结
下一篇代码规范
想对作者说点什么? 我来说一句

retrofit封装

2017年09月17日 25.81MB 下载

Retrofit简单上手的demo

2018年01月16日 5.59MB 下载

retrofit下载apk文件

2017年09月01日 220KB 下载

RetrofitDemo

2016年04月20日 105KB 下载

没有更多推荐了,返回首页

关闭
关闭