网络模块初步了解
内部使用的网络框架是OKHTTP3
将OkHttpClient的各自操作封装成一个类“HttpClient”
post请求步骤
1.创建OkHttpClient对象。
项目中将创建OkHttpClient对象以及配置参数的方法单独封装成一个类。
方法作用见注释2.通过RequestBody.create 创建requestBody对象、 并配置请求头(可不配置)
3.创建Request对象,设置URL地址
4.创建一个call对象,参数就是Request请求对象。
5.请求加入调度,重写回调方法。
回调方法单独封装成了一个类
我理解的关键点:一个是header,用于服务器分辨请求的客户端,一个是body,用于携带客户端请求的数据。
何时该考虑布局适配的问题?
前言:1.界面元素很满;2.元素布局很均匀。下文介绍的是情况1.
界面元素很满:
设计稿 android studio上的预览图 在窄屏手机上的真实效果当UI在某个方向上(横向或者纵向)几乎挤满屏幕的时候,很容易产生元素挤压的情况,解决办法是使用Linearlayout.布局
这里将元素分为两块,具体划分见下图;笔者做的是将按钮宽度写死,剩余位置全部给另一块元素。
Linearlayout布局 分为两块(1) 分为两块(2)代码结构如下:
块1,不固定宽度;通过设置layout_weight获取父布局剩余宽度 块2,固定布局宽度。ViewModel知识
通过ViewModelProviders.of(Activity activity).get(XXXViewModel.class); 获取到的ViewModel是实例,不同的Activity获取到的ViewModel不一样。
使用ViewModel+LiveData如何在无生命周期的类中通知UI更新数据?
1.在有生命周期的类(activity、fragment等)注册livedata的observe:
注册observe2.定义全局唯一的listener manager:
用于更新数据 listener的结构3.将在ViewModel中创建listener ,并注册到listener manager中:
listener中执行的是livedata.postValue();
ViewModelProviders生成实例的时候会调用RegionsViewModel(@NonNull Application application),因此在此处进行listener的注册。
当activity销毁的时候会调用protected void onCleared() ,因此在此处进行listener的销毁。
listener中进行livedata的数据传递4.编写完上面的代码之后,就可以通过listener manager获取到ViewModel中的实例listener,通过该listener更新livedata的数据,activity就能实时更新数据啦!
通过listener manager调用listener更新数据。问:Activity间如何共享livedata?
答:通过自定义livedata实现。
笔者的疑问:
1.在网上基本上都是通过自定义livedata来实现activity之间的数据共享,并没有看到有人直接通过 static 一个livedata来实现数据共享,不知道是什么原因。
2.除了自定义livedata实现activity之间的数据共享外,没有看到其他的livedata的数据共享方法。
自我思考:假设场景:你需要通过网络请求获取用户信息,该用户信息在多个activity之间都有用到。如果是你,你会怎么借助livedata实现数据共享?(以减少网络请求的次数)
答:定义一个user类,单例实现,每次livedata数据更新以后都将将数据保存到user单例中,各个activity在onCreate中除了注册livedata 的监听者外,还应读取一次user单例中的数据来更新界面。(简单的办法)
参考:
网友评论