Rx java 使用RxJava2下载带有进程的文件

Rx java 使用RxJava2下载带有进程的文件,rx-java,rx-java2,Rx Java,Rx Java2,正如标题所说,我想使用RxJava2和okhttp下载该文件。而且还需要过程 在我看来,数据流是字符串url->响应->乘法浮点处理 所以首先我需要一个单曲,它发出响应 Single.create((SingleOnSubscribe<Response>) emitter -> { emitter.onSuccess(xx);// or throw error }); 但我不知道这样做是否合适 编辑 我不关心okhttp的细节,我只关心与RxJava相关的东西,比如S

正如标题所说,我想使用RxJava2和okhttp下载该文件。而且还需要过程

在我看来,数据流是
字符串url
->
响应
->乘法
浮点处理

所以首先我需要一个
单曲
,它发出
响应

Single.create((SingleOnSubscribe<Response>) emitter -> {
    emitter.onSuccess(xx);// or throw error
});
但我不知道这样做是否合适

编辑
我不关心okhttp的细节,我只关心与
RxJava
相关的东西,比如
Single
Flowable

这是一个关于如何使用改型2、okhttp、Okio和RxJava实现的示例

Single.create((SingleOnSubscribe<Response>) emitter -> {
    emitter.onSuccess(xxx);// or throw error
}).toFlowable()
        .flatMap((Function<Response, Publisher<Float>>) response -> Flowable.create(xxx))
        .subscribe(process -> {});

}
import com.squareup.okhttp.responsebook;
导入okio.BufferedSink;
导入okio.okio;
进口改装.响应;
导入reformation.http.GET;
导入reformation.http.Query;
进口接收。可观察;
接口服务{
@获取(“/media/download”)
可观察下载(@Query(“id”)字符串id);
}
公共可观察下载(字符串id){
返回服务。下载(id)
.flatMap(this::saveFile);
}
公共可观察存储文件(响应){
返回可观察的。创建((可观察的。OnSubscribe)订户->{
试一试{
//您可以访问响应的标题
字符串头=response.headers().get(“内容处置”);
//这是一种特殊情况,由您决定如何保存文件
//若您不是从direct link下载文件,则可能是
//幸运的是从头文件中获得了文件名
字符串文件名=标题。替换(“附件;文件名=,”);
//将在全局音乐目录中创建文件,可以是任何其他文件
//目录,只是别忘了处理权限
File File=新文件(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY\u MUSIC)
.getAbsoluteFile(),文件名);
//“环境.目录\u音乐”前没有空格
BufferedSink sink=Okio.buffer(Okio.sink(文件));
//您可以访问响应主体
sink.writeAll(response.body().source());
sink.close();
subscriber.onNext(文件);
subscriber.onCompleted();
}捕获(IOE异常){
e、 printStackTrace();
认股人。认股人(e);
}
});
}

如果您使用改装,您可以尝试此功能

如果不适应其中一个基础类:

首先使用okhttp异步api。
其次,使用rx调度器进行异步

发出
响应
可能已经太晚了。您可能想了解一个可适应的进度方案,您所说的“需要流程”是什么意思?你的意思是像在progressbar中显示下载百分比一样吗?我需要获得progroess并在UI中显示它。这里是使用okhttp和rxjava下载文件的旧示例。我不想使用这个库。显然没有过程。