当前位置: 移动技术网 > 移动技术>移动开发>Android > Retrofit的初次使用

Retrofit的初次使用

2019年03月12日  | 移动技术网移动技术  | 我要评论

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 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<httponnextlistener> 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<t> 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<data> {

    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<data>() {
            @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

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网