美文网首页
2019-11-07

2019-11-07

作者: ambe_gzy | 来源:发表于2019-11-07 22:31 被阅读0次

    网络模块初步了解

    内部使用的网络框架是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:

    注册observe

    2.定义全局唯一的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单例中的数据来更新界面。(简单的办法)

    参考:

    可被感知的数据 - LiveData 原理详解

    LiveData的分析与简单使用

    LiveData && ViewModel 使用详解


    相关文章

      网友评论

          本文标题:2019-11-07

          本文链接:https://www.haomeiwen.com/subject/kommbctx.html