欢迎光临散文网 会员登陆 & 注册

okHttp异步请求与UI主线程同步的例子

2023-06-05 19:32 作者:便宜酒  | 我要投稿

需求:在搜索框输入省或城市名字,调用网络接口获取其下的城市或区的id与名字,名字作为数据源加载到bottomsheetdialog里的联想列表(一个recyclerview)上。调用网络接口是一个异步操作,和UI的加载是同时进行的,目的是为了防止请求失败导致主线程阻塞。而正确逻辑应当是通过网络接口获取到非空数据源后,才开始初始化适配器。

解决办法:在网络请求成功的回调方法里初始化适配器。

【UI主线程内容】

仅仅包括一个bottomsheetdialog的初始化和软键盘搜索监听事件。这个监听事件是发起okHttp异步请求的,不要在它的后面加载需要网络数据源的UI。

【okHttp请求方法】

基本步骤:实例化请求OkHttpClient,拼接URL,发起异步请求队列,new一个回调

在回调里就可以使用runOnUIThread( ( )->{ } )向主线程添加代码块,也就是初始化适配器的操作,并弹出bottomsheetdialog。

【补充】

【软键盘隐藏方法】

【适配器的条目监听】

基本步骤:声明监听,set方法,暴露接口,绑定视图

本文出现了三个lambda表达式,依次是:

1.适配器里的setOnClickListenr( v -> {} ) v代表条目视图,代替的是

2.初始化条目监听里的onItemClickListener = position -> { },含义和上面一样

3.线程同步里的runOnUiThread(()-> { }

【Gson的使用】

天气预报的网络数据量很大,而且Json字符串非常乱,要把这样的Json手动转化为Java对象太繁琐,于是引入Gson自动序列化生成java对象或者反序列化。例如

而自动生成的实体类的属性名和字段名是完全相同的,开发框架会自动帮我们映射。


okHttp异步请求与UI主线程同步的例子的评论 (共 条)

分享到微博请遵守国家法律