依赖添加
//必须3个为必须
implementation 'com.ljx.rxhttp:rxhttp:2.5.2'
//rxhttp v2.2.2版本起,需要手动依赖okhttp
implementation 'com.squareup.okhttp3:okhttp:4.8.1'
kapt 'com.ljx.rxhttp:rxhttp-compiler:2.5.2' //生成RxHttp类
//rxjava3
implementation 'io.reactivex.rxjava3:rxjava:3.0.6'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation 'com.ljx.rxlife3:rxlife-rxjava:3.0.0' //管理RxJava3生命周期,页面销毁,关闭请求
defaultConfig配置
defaultConfig { applicationId "com.wsd.rxhttpdemo" minSdkVersion 21 targetSdkVersion 30 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" javaCompileOptions { annotationProcessorOptions { arguments = [ //使用asXxx方法时必须,告知RxHttp你依赖的rxjava版本,可传入rxjava2、rxjava3 rxhttp_rxjava: 'rxjava3' ] } } }
调用
class MainActivity : AppCompatActivity() { // apk名字 private var apkName = "" // apk地址 private var apkUrl = "" // 进度 private var progress:Int ?= 0 // 当前下载进度 private var currentSize:Long = 0 // 下载总大小 private var totalSize:Long = 0 // 监听下载断点 private var disposableSelf:Disposable?=null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) getApk("softwareName","apk.apk") button.setOnClickListener { stopDownload() } button5.setOnClickListener { downLoadApk() } } // 请求下来APK名字与网址 private fun getApk(softwareName:String,name:String){ Log.e(TAG, "getApk: ") // 打开调试 就是可以看到日志输出 RxHttp.setDebug(true) // post发送json请求 RxHttp.postJson("http://192.168.0.12:2255/software/all") // 添加参数 自动转变对象 .add(softwareName,name) // 接受参数类型为对象 我这里用的是一个实体类 .asClass(GetApkList::class.java) // 订阅回调 .subscribe({ Log.e(TAG, "getApk: $it") apkName = it.data[0].softwareName apkUrl = it.data[0].url downLoadApk() }, { Log.e(TAG, "getApk: $it") }) } @SuppressLint("SdCardPath") // 本地目标路径 private var path = "/mnt/sdcard/apk/apk" // 文件当前的大小 private var length = File(path).length() private fun downLoadApk(){ // 定义变量保存回调结果 val disposable = RxHttp.get(apkUrl) // 发送请求 .asAppendDownload(path,AndroidSchedulers.mainThread()){ progress = it.progress currentSize = it.currentSize totalSize = it.totalSize Log.e(TAG, "downLoadApk: $progress") } // 感知生命周期 主线程回调 .life(this) .subscribe({ Log.e(TAG, "成功: $it") }, { Log.e(TAG, "失败: $it") }) disposableSelf = disposable } // 暂停下载,若继续下载重新执行一下下载函数就好了 private fun stopDownload(){ if (disposableSelf?.isDisposed?.not() == true){ disposableSelf?.dispose() } } companion object{ const val TAG = "MainActivity" } }