第一次技术博客
Rxjava+Retrofit+okhttp 网络请求框架学习
学习利用okhttp下载文件
okhttp:一个处理网络请求的开源项目,是安卓端最火热的轻量级框架
retrofit:Retrofit是Square公司开源的一个高质量高效率的http库,它将我们自己开发的底层的代码和细节都封装了起来
rxjava:一种用Java语言实现的响应式编程,来创建基于事件的异步程序
在当下okhttp+retrofit+rxjava是一种比较火热的网络请求框架,在这个框架中:
okhttp主要承担的是创建网络请求client,网络请求过程的作用,大概就是设置网络不稳定时进行重新连接,超时,拦截器等。
CLIENT = OkHttpClient.Builder()
.cache(Cache(File(context.cacheDir, "okhttp"), 10 * 1024 * 1024L))
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.build()
这里主要设置了缓存空间,超时连接,读写超时
retrofit其实也是可以单独使用,用来进行网络的请求,但是与okhttp结合后,retrofit的作用体现在对okhttp创建的网络请求进行封装。但是有所不同的是,在retrofit中我们需要定义一个返回接口
public interface RequestServes {
@POST("mobileLogin/submit.html")
Call getReslut(@Query("loginname") String loginname);
}
在接口中我们可以看到,我们返回了一个Call类型的对象,在okhttp我们返回的是一个Responsebody类型的对象。如果我们在retrofit中也想得到一个Responsebody里数据,我们可以这样定义接口
public interface RequestServes {
@POST("mobileLogin/submit.html")
Call<Responsebody> getReslut(@Query("loginname") String loginname);
}
得到Call后我们可以选择同步或者异步来处理回调。下面贴出异步处理回调的做法
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
try {
System.out.println(response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
t.printStackTrace();
}
});
对于rxjava我个人认为主要作用体现在异步处理时方便切换线程的作用吧。(学的不深,还有很多东西没搞清楚)首先我们需要被观察者Observable,观察者Observer。两者通过subscribe来实现订阅关系。其中我们可以通过subscribeOn和observeOn来规定他们所在的线程。与传统观察者模式不同, RxJava 的事件回调方法除了普通事件 onNext() (相当于 onClick() / onEvent())之外,还定义了两个特殊的事件:onCompleted() 和 onError()。
@FormUrlEncoded
@POST("getClassFile")
fun getClassFile(@Field("cid")cid: Int): Observable<DataList<TeacherList>> //引入rxjava我们回调时要返回一个Observable对象
fun getClassFile(cid: Int): Observable<ArrayList<TeachersFile>> =
FileApi.IMPX.getClassFile(cid)
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.map {
it.data.courseFile
}
.onErrorResumeNext { err: Throwable ->
Observable.just(ArrayList())
}
........
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何调试 malloc 的底层源码
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端