资讯专栏INFORMATION COLUMN

Retrofit的初次使用

番茄西红柿 / 2659人阅读

摘要:是一个已经写好的网络框架库,先以本地导入到自己的项目中。如果在实际项目中,是为了使用的操作符将转换为。

rxretrofitlibrary是一个已经写好的网络框架库,先以本地Module导入到自己的项目中。

1、它的初始化操作大多在自定义的application中完成,如:

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        //初始化网络框架库
        RxRetrofitApp.init(this,true);
    }
}
View Code

2、在rxretrofitlibrary下定义一个回调信息统一封装类(即实际工作中网络请求的返回json实体类),泛型T表示用户真正关心的数据Data类,例如:

/**
 * 回调信息统一封装类
 */
public class BaseResultEntity {
    //  判断标示
    private int ret;
    //    提示信息
    private String msg;
    //显示数据(用户需要关心的数据)
    private T data;

    public String getMsg() {
        return msg;
    }

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

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public int getRet() {
        return ret;
    }

    public void setRet(int ret) {
        this.ret = ret;
    }
}
View Code

3、在项目中使用GsonFormat插件快速创建简单的Data实体类

public class Data {

    private String downurl;
    private String icoUri;
    private String name;
    private String packageName;

    public String getDownurl() {
        return downurl;
    }

    public void setDownurl(String downurl) {
        this.downurl = downurl;
    }

    public String getIcoUri() {
        return icoUri;
    }

    public void setIcoUri(String icoUri) {
        this.icoUri = icoUri;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPackageName() {
        return packageName;
    }

    public void setPackageName(String packageName) {
        this.packageName = packageName;
    }

    @Override
    public String toString() {
        return "name:"+name+",packageName:"+packageName ;
    }
}
View Code

4、在项目下创建相应的网络请求接口(@GET注解后带的参数为网络请求url除BaseUrl部分,因为BaseUrl保存在了5中的请求同一封装类中,便于管理)

public interface HttpGetService {

    @GET("url")
    Observable> getData();
}
View Code

5、为了使用方便,在rxretrofitlibrary下再定义一个请求统一封装类BaseApi,此处实现的Func1接口泛型为BaseResultEntity, T。如果在实际项目中,是为了使用RxJava的map操作符将BaseResultEntity转换为T。(转换的方法重点在代码最下面的call方法中,根据实际的业务逻辑来定)

/**
 * 请求统一封装
 * @param 
 */
public abstract class BaseApi implements Func1, T>{
    //rx生命周期管理
    private SoftReference rxAppCompatActivity;
    /*回调*/
    private SoftReference listener;
    /*是否能取消加载框*/
    private boolean cancel;
    /*是否显示加载框*/
    private boolean showProgress;
    /*是否需要缓存处理*/
    private boolean cache;
    /*基础url*/
    private String baseUrl = "http://192.168.0.101:8080/";
    /*方法-如果需要缓存必须设置这个参数;不需要不用設置*/
    private String mothed;
    /*超时时间-默认6秒*/
    private int connectionTime = 6;
    /*有网情况下的本地缓存时间默认60秒*/
    private int cookieNetWorkTime = 60;
    /*无网络的情况下本地缓存时间默认30天*/
    private int cookieNoNetWorkTime = 24 * 60 * 60 * 30;
    /* 失败后retry次数*/
    private int retryCount = 1;
    /*失败后retry延迟*/
    private long retryDelay = 100;
    /*失败后retry叠加延迟*/
    private long retryIncreaseDelay = 10;

    public BaseApi(HttpOnNextListener listener, RxAppCompatActivity rxAppCompatActivity) {
        setListener(listener);
        setRxAppCompatActivity(rxAppCompatActivity);
        setShowProgress(false);
        setCache(false);

        setCancel(true);

        setCookieNetWorkTime(60);
        setCookieNoNetWorkTime(24*60*60);
    }

    /**
     * 设置参数
     *
     * @param retrofit
     * @return
     */
    public abstract Observable getObservable(Retrofit retrofit);


    public int getCookieNoNetWorkTime() {
        return cookieNoNetWorkTime;
    }

    public void setCookieNoNetWorkTime(int cookieNoNetWorkTime) {
        this.cookieNoNetWorkTime = cookieNoNetWorkTime;
    }

    public int getCookieNetWorkTime() {
        return cookieNetWorkTime;
    }

    public void setCookieNetWorkTime(int cookieNetWorkTime) {
        this.cookieNetWorkTime = cookieNetWorkTime;
    }

    public String getMothed() {
        return mothed;
    }

    public int getConnectionTime() {
        return connectionTime;
    }

    public void setConnectionTime(int connectionTime) {
        this.connectionTime = connectionTime;
    }

    public void setMothed(String mothed) {
        this.mothed = mothed;
    }

    public String getBaseUrl() {
        return baseUrl;
    }

    public void setBaseUrl(String baseUrl) {
        this.baseUrl = baseUrl;
    }

    public String getUrl() {
        return baseUrl + mothed;
    }

    public void setRxAppCompatActivity(RxAppCompatActivity rxAppCompatActivity) {
        this.rxAppCompatActivity = new SoftReference(rxAppCompatActivity);
    }

    public boolean isCache() {
        return cache;
    }

    public void setCache(boolean cache) {
        this.cache = cache;
    }

    public boolean isShowProgress() {
        return showProgress;
    }

    public void setShowProgress(boolean showProgress) {
        this.showProgress = showProgress;
    }

    public boolean isCancel() {
        return cancel;
    }

    public void setCancel(boolean cancel) {
        this.cancel = cancel;
    }

    public SoftReference getListener() {
        return listener;
    }

    public void setListener(HttpOnNextListener listener) {
        this.listener = new SoftReference(listener);
    }


    public int getRetryCount() {
        return retryCount;
    }

    public void setRetryCount(int retryCount) {
        this.retryCount = retryCount;
    }

    public long getRetryDelay() {
        return retryDelay;
    }

    public void setRetryDelay(long retryDelay) {
        this.retryDelay = retryDelay;
    }

    public long getRetryIncreaseDelay() {
        return retryIncreaseDelay;
    }

    public void setRetryIncreaseDelay(long retryIncreaseDelay) {
        this.retryIncreaseDelay = retryIncreaseDelay;
    }

    /*
         * 获取当前rx生命周期
         * @return
         */
    public RxAppCompatActivity getRxAppCompatActivity() {
        return rxAppCompatActivity.get();
    }

    @Override
    public T call(BaseResultEntity httpResult) {
        //map 定义转换规则
        if (httpResult.getRet() == 0) {//0失败,1成功
            throw new HttpTimeException(httpResult.getMsg());
        }
        return httpResult.getData();
    }
}
View Code

6、在项目下创建子类DataApi来继承5中的请求统一封装类

public class DataApi extends BaseApi {

    public DataApi(HttpOnNextListener listener, RxAppCompatActivity rxAppCompatActivity) {
        super(listener, rxAppCompatActivity);
        //允许缓存
        setCache(true);
        //缓存的标志
        setMothed("AppStore/test");
    }

    @Override
    public Observable getObservable(Retrofit retrofit) {
        HttpGetService httpGetService = retrofit.create(HttpGetService.class);
        return httpGetService.getData();
    }
}
View Code

7、最终在继承自RxAppCompatActivity(因为RxJava需要控制生命周期)的子Activity中调用来得到网络请求数据

DataApi api = new DataApi(new HttpOnNextListener() {
            @Override
            public void onNext(Data data) {
                Log.i("MainActivity","onNext:"+data.toString()) ;

                Log.i("MainActivity","downurl:"+data.getDownurl());
            }

            @Override
            public void onCacheNext(String string) {
                super.onCacheNext(string);
                Log.i("MainActivity","onCache:"+string);
            }

            @Override
            public void onError(Throwable e) {
                super.onError(e);
            }
        },this);
        HttpManager manager = HttpManager.getInstance();
        //执行网络请求
        manager.doHttpDeal(api);
View Code

 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/2441.html

相关文章

  • 高性能OkHttp

    摘要:响应会被缓存写入指定的文件夹,如果缓存大小已经超过了文件夹的指定大小,会根据规则来进行筛选。除了能够允许开发者监测数据库以及视图层级之外,还能辅助监测所有的来自的网络请求与响应。 原文地址,这里 OkHttp 是笔者在为为 Khan Academy开发这个 Android app时候的必用库之一。OkHttp库本身已经提供了非常优秀的功能配置,但是下面是我们在实践中总结出来的一些能够有...

    Ocean 评论0 收藏0
  • retrofit - 收藏集 - 掘金

    摘要:一本适合基础入门的中文翻译书掘金中文翻译版本书是对所写一书的中文翻译版本,仅供交流学习使用,严禁商业用途。我们在中使用监测事件掘金源码解析掘金看看调用的代码又是什么抱着一贯的好奇,点进去看看。 一本适合 RxJava 基础入门的中文翻译书 - Android - 掘金RxJava Essentials 中文翻译版 本书是对Ivan.Morgillo所写一书的中文翻译版本,仅供交流学习使...

    Fourierr 评论0 收藏0
  • Android Retrofit 2.5.0使用基础详解

    摘要:前言在开发中,网络请求必不可少而在所有网络请求库中,是最受开发者欢迎的一个网络请求库官方文档简介是公司开发的一款针对网络请求的框架遵循设计风格底层基于功能支持同步异步网络请求支持多种数据的解析序列化格式等等通过注解配置网络请求参数提供对的 前言 在Andrroid开发中,网络请求必不可少 而在Android所有网络请求库中,Retrofit是最受开发者欢迎的一个网络请求库 retr...

    zacklee 评论0 收藏0
  • Android之Retrofit详解(转载)

    摘要:说明该文章转载于前言在开发中,网络请求十分常用而在网络请求库中,是当下最热的一个网络请求库今天,我将献上一份非常详细的使用教程,希望你们会喜欢。说明:该文章转载于https://www.jianshu.com/p/a3e162261ab6 前言 在Andrroid开发中,网络请求十分常用 而在Android网络请求库中,Retrofit是当下最热的一个网络请求库 image ...

    番茄西红柿 评论0 收藏0
  • 【Android】RxJava + Retrofit完成网络请求

    摘要:完成网络请求添加依赖。新的配置获取对象请求在新的线程中执行请求完成后在线程中执行保存用户信息到本地最后在主线程中执行请求失败请求成功形式的时候,把请求封装进,在请求结束后调用或在请求失败后调用。 showImg(https://segmentfault.com/img/remote/1460000018253018); 前言 本文基于RxJava、Retrofit的使用,若是对RxJa...

    lei___ 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<