RxHttp 让你眼前一亮的Http请求框架,2024年最新HarmonyOS鸿蒙自定义控件面试

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新HarmonyOS鸿蒙全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img

img
img
htt

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注鸿蒙)
img

正文

.asClass(Student.class) //返回Student类型
.subscribe(student -> {
//请求成功,这里就能拿到 Student对象
}, throwable -> {
//请求失败
});

如果要返回Student对象列表,则可以通过asList(Class<T>)方法,如下:

RxHttp.postForm(“/service/…”) //发送post表单请求
.add(“key”, “value”) //添加参数,可调用多次
.asList(Student.class) //返回List类型
.subscribe(students -> {
//请求成功,这里就能拿到 Student对象列表
}, throwable -> {
//请求失败
});

解析Response<T>类型数据

然而,现实开发中,大多数人的接口,返回的数据结构都类似下面的这个样子

public class Response {
private int code;
private String msg;
private T data;
//这里省略get、set方法
}

对于这种数据结构,按传统的写法,每次都要对code做判断,如果有100个请求,就要判断100次,真的会逼死强迫症患者。

RxHttp对于这种情况,给出完美的答案,比如Response<T>里面的T代表一个Student对象,则可以通过asResponse(Class<T>)方法获取,如下:

RxHttp.postForm(“/service/…”) //发送post表单请求
.add(“key”, “value”) //添加参数,可调用多次
.asResponse(Student.class) //返回Student类型
.subscribe(student -> {
//请求成功,这里能拿到 Student对象
}, throwable -> {
//请求失败
});

如果Response<T>里面的T代表一个List<Student>列表对象,则可以通过asResponseList(Class<T>)方法获取,如下

RxHttp.postForm(“/service/…”) //发送post表单请求
.add(“key”, “value”) //添加参数,可调用多次
.asResponseList(Student.class) //返回List类型
.subscribe(students -> {
//请求成功,这里能拿到List列表对象
}, throwable -> {
//请求失败
});

更多时候,我们的列表数据是分页的,类似下面的数据结构

{
“code”: 0,
“msg”: “”,
“data”: {
“totalPage”: 0,
“list”: []
}
}

此时,调用RxHttp的asResponsePageList(Class<T>)方法依然可以完美解决,如下:

RxHttp.postForm(“/service/…”) //发送post表单请求
.add(“key”, “value”) //添加参数,可调用多次
.asResponsePageList(Student.class) //返回PageList类型
.subscribe(pageList -> {
//请求成功,这里能拿到PageList列表对象
int totalPage = pageList.getTotalPage(); //总页数
List students = pageList.getData(); //单页列表数据
}, throwable -> {
//请求失败
});

到这,估计很多人会问我:

  • 你的code在哪里判断的?
  • 我的code是100或者其它值才代表正确,怎么改?
  • 我的Response<T>类里面的字段名,跟你的都不一样,怎么该?
  • 你这成功的时候直接返回Response<T>里面的T,那我还要拿到code做其他的判断,执行不同业务逻辑,怎么办?

这里可以先告诉大家,asResponse(Class<T>)asResponseList(Class<T>)asResponsePageList(Class<T>)这3个方法并不是RxHttp内部提供的,而是通过自定义解析器生成,里面的code判断、Response<T>类都是开发者自定义的,如何自定义解析器,请查看本文5.1章节----自定义Parser。

接着回答第4个问题,如何拿到code做其他的业务逻辑判断,很简单,我们只需用OnError接口处理错误回调即可,如下:

RxHttp.postForm(“/service/…”) //发送post表单请求
.add(“key”, “value”) //添加参数,可调用多次
.asResponse(Student.class) //返回Student类型
.subscribe(student -> {
//请求成功,这里能拿到 Student对象
}, (OnError) error -> { //注意,这里要用OnError接口,其中error是一个ErrorInfo对象
//失败回调
//拿到code字段,此时就可以对code做判断,执行不同的业务逻辑
int code = error.getErrorCode();
String errorMsg = error.getErrorMsg() //拿到msg字段
});

注:上面的OnError接口并非是RxHttp内部提供的,而是自定义的,在Demo里可以找到

以上介绍的5个asXxx方法,可以说基本涵盖80%以上的业务场景,RxHttp内部提供了一系列asXxx方法,如,asInteger、asBoolean、asLong、asBitmap、asList、asMap等等,它们最终都是通过asParser(Parser<T>)方法实现的,具体实现过程,这里先跳过,后续会详细讲解。

3.3.3、第三部曲:订阅回调

这一步就很简单了,在第二部曲中,asXxx方法会返回Observable<T>对象,没错,就是RxJava内部的Observable<T>对象,此时我们便可通过subscribe系列方法订阅回调,如下:

//不处理任何回调
RxHttp.postForm(“/service/…”) //发送post表单请求
.add(“key”, “value”) //添加参数,可调用多次
.asResponseList(Student.class) //返回List类型
.subscribe(); //不订阅任何回调

//仅订阅成功回调
RxHttp.postForm(“/service/…”) //发送post表单请求
.add(“key”, “value”) //添加参数,可调用多次
.asResponseList(Student.class) //返回List类型
.subscribe(students -> {
//请求成功,这里能拿到List列表对象
});

//订阅成功与失败回调
RxHttp.postForm(“/service/…”) //发送post表单请求
.add(“key”, “value”) //添加参数,可调用多次
.asResponseList(Student.class) //返回List类型
.subscribe(students -> {
//请求成功,这里能拿到List列表对象
}

  • 29
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简介: 本框架是在Netroid的基础之上进行了封装,节省了其中配置的过程和一些不必要的操作 主要进行文本请求和图片请求,图片请求都进行了缓存(内存缓存和sd卡缓存)的封装,sd卡缓存时间可自行更改. 文本请求可传入解析的泛型clazz,即可返回解析后的clazz对象进行数据 操作,如果不需要进行数据解析,可通过另一种方式获取原生的string; 单图请求,单图请求可执行对本地asset文件夹,sd卡,http三种请求模式.只需传入相应的路径即可; 多图请求,多图请求主要是针对listview这种图文混排模式而生,能快速加载图片并实现缓存,不需要考虑 图片错位问题.只需传入相应的url即可完成全部功能. 使用说明: 1:在新创建的Manifest.xml中application中申明: <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:name="com.aqs.application.UApplication" > 并初始化Const.init();此处的初始化主要是对内存缓存,SD卡缓存大小,缓存时间等进行设置,如果不初始化,则按使用默认配置; 2:依赖HttpAqs-library或者jar包 3:通过公有方法进行网络请求,示例如下: >文本请求: >解析后的文本请求: HttpRequest.reqquest(int,String,Parse,Class){....}; >原生string文本请求: HttpRequest.getString(String,AqsString){...} >单张图片请求: HttpRequest.setImage(ImageView,String,int,int){...} >多张图片请求: 可使用AQSImageView件来加载图片;特别是针对listview图文混排 实现方法: >在布局中添加 >在代码中 av.setImageUrl(url);

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值