基于OkHttp Retrofit RxJava 多线程下载。请求、缓存、自动更新.限制队列数.封装库...

XDownload介绍

本库封装基于Okhttp3,Retrofit2,RxJava2.0,Greendao3.2
ps : 当然当然,都封装好了,你也可以无视


GitHub地址

如果你觉得好用,对你有帮助,请给个star
接口使用360市场的如果有侵权,联系本人删除,谢谢
—— [ Demo地址,点击打开 ]

效果图

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

主要功能

  • 自动更新,酷炫的水波纹
  • 网络请求,支持自动ProgressDialog
  • 网络请求,自定义是否缓存,无论任何方式
  • 网络请求,自定义缓存时间,无网络缓存时间
  • 队列下载,可限制队列最大数。
  • 断点下载,APP强制关闭,依旧不影响
  • 网络请求缓存,可缓存String,Gson
  • 代码全注释,方便您的阅读

如何使用

在当前工程中引入
compile ‘com.github.2745329043:XDownloadLibrary:1.0.8’
最好直接参考demo
https://github.com/2745329043/XDownloadDemo

Application初始化工作

//初始化网络请求
RetrofitClient.init(this)
    .setDebug(true)              //是否输出调试日志
    .setBaseUrl(IConstantPool.sCommonUrl)
    .setApplictionId(BuildConfig.APPLICATION_ID)
    /** 以下都是按需设置 */
    .setDownloadsQueueCount(5)                 //下载最大数量
    .setDbName("net_buffer_db")                //数据库表名
    .setConnectionTimeout(6)                   //普通请求连接超时
    .setReadTimeout(6)                         //普通请求读取超时
    .setDownConnectionTime(6)                  //下载连接超时   6秒
    .setNetBufferTime(60)                      //有网络的情况下缓存  60秒
    .setNoNetBufferTime(24 * 60 * 60 * 7)      //无网络的时候,缓存
    /** 头部参数 */
    .setNetRequestParamsListener(new NetRequestParamsListener() {
        @Override
        public HashMap<String, String> getHeaderParams() {
            //需要请传,不需要返回 null
    //                        return null;
            HashMap<String, String> map = new HashMap<>();
            map.put("userId","2745329043");
            return map;
        }
    })
    /** 设置完,记得Buid */
    .build();

先来效果图

网络请求

> **定义 HttpService 接口**
public interface HttpService {

    /* 获取下载列表 post */
    @POST(IConstantPool.DOWNLOAD_URL)
    Observable<DownListBean> getDownloadList(
            @Query("page") int page,
            @Query("type") int type
    );

    /* 普通请求 Get -> 获取 String 版本*/
    @GET(IConstantPool.REQUEST_LIST_URL)
    Observable<ResponseBody> requestList();

    /* 普通请求 Get -> 获取 GSON版本 版本 -> 这奇葩结构   是List<XXX> 的这种*/
    @GET(IConstantPool.REQUEST_LIST_URL)
    Observable<List<BriefListBean>> requestList_GSON();
}

普通String请求

RetrofitClient.getService(HttpService.class)
    .requestList()
    .compose(new ApplySchedulers<ResponseBody>())
    .subscribe(new NetProgressSubscriber<>(RequestFragment.this, NetDialogConfig.NORMAL_LOADING, new SimpleNetResponseListener<ResponseBody>() {
     @Override
    public void onSucceed(ResponseBody body, String s) {
            try {
                    ToastUtils.getInstance().toast(body.string());
            } catch (IOException e) {
                    e.printStackTrace();
            }
     }
 }));

普通Gson请求

RetrofitClient.getService(HttpService.class)
    .requestList_GSON()
    .compose(new ApplySchedulers<List<BriefListBean>>())
    .subscribe(new NetProgressSubscriber<>(RequestFragment.this, NetDialogConfig.NORMAL_LOADING, new SimpleNetResponseListener<List<BriefListBean>>() {
     @Override
    public void onSucceed(List<BriefListBean> bean, String s) {
        ToastUtils.getInstance().toast("拿到好多数据:"  + bean.size());
     }
 }));

网络请求过程中,是否显示Dialog

参数说明
NetDialogConfig.UN_LOADING不显示
NetDialogConfig.NORMAL_LOADING显示,点击Dialog外,销毁并关闭队列
NetDialogConfig.FORBID_LOADING显示,不可取消

#

网络请求过程中,是否缓存数据

参数说明
NetBufferConfig.NORMAL_BUFFER缓存
NetBufferConfig.UN_BUFFER不缓存

缓存使用案例

Demo中截图

自定义缓存时间使用案例

这里写图片描述

String缓存处理

因为ResponseBody.string() 方法 机制问题。所以框架内。String缓存需要
这里写图片描述

//需要自己手动存储
 BufferDbUtil.getInstance().updateResulteBy(IConstantPool.REQUEST_LIST_URL,result);

下载功能

//下载管理 - 记得 ondestory
private RetrofitDownloadManager mRetrofitDownloadManager;
//使用 RetrofitDownloadManager 创建下载对象,内部有断点功能
mDownInfo = mRetrofitDownloadManager.createDownInfo("http://xxx.apk");
//点击按钮,开始更新
mRetrofitDownloadManager.down(mDownInfo);

就这么简单,要记得释放资源,当然你不做也可以

@Override
public void onDestroy() {
   super.onDestroy();
   mRetrofitDownloadManager.destory();
}

多下载参考demo

/fragment/DownloadFragment.java

转载于:https://my.oschina.net/u/3557432/blog/994285

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先需要在项目中添加OkHttpRetrofitRxJava的依赖。 在build.gradle文件中添加以下代码: ```groovy dependencies { implementation 'com.squareup.okhttp3:okhttp:4.9.0' implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation 'io.reactivex.rxjava2:rxjava:2.2.10' } ``` 然后在代码中创建Retrofit实例和API接口定义: ```java public interface ApiService { @GET("posts") Observable<List<Post>> getPosts(); } Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://jsonplaceholder.typicode.com/") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .client(new OkHttpClient()) .build(); ApiService apiService = retrofit.create(ApiService.class); ``` 最后在需要请求API接口的地方,使用RxJava的Observable来发起请求: ```java apiService.getPosts() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<List<Post>>() { @Override public void onSubscribe(Disposable d) { // 订阅事件 } @Override public void onNext(List<Post> posts) { // 请求成功,处理返回结果 } @Override public void onError(Throwable e) { // 请求失败,处理异常 } @Override public void onComplete() { // 请求完成 } }); ``` 其中,subscribeOn(Schedulers.io())表示在io线程中发起请求,observeOn(AndroidSchedulers.mainThread())表示在主线程中处理结果。具体的线程调度可以根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值