设为首页 加入收藏

TOP

Retrofit的初次使用(一)
2019-09-01 23:12:57 】 浏览:73
Tags:Retrofit 初次 使用

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<T> {
    //  判断标示
    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<BaseResultEntity<Data>> getData();
}
View Code

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

/**
 * 请求统一封装
 * @param <T>
 */
public abstract class BaseApi<T> implements Func1<BaseResultEntity<T>, T>{
    //rx生命周期管理
    private SoftReference<RxAppCompatActivity> rxAppCompatActivity;
    /*回调*/
    private SoftReference<HttpOnNextListener> 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
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Android自动解析html带图片,实现.. 下一篇Android-沉浸式状态栏的实现

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目