android - Android:在网络响应上加载 Oncreate 布局
问题描述
我的用例需要加载布局 setcontentview,这取决于网络请求和它收到的响应,我必须在网络响应上加载视图。例如。*我有老师布局和学生布局。决策来自网络。现在我面临的问题是当我进行网络调用时,它在一个单独的线程上运行,当我将消息发送回 uithread 并启动布局的 setcontentview 时,取决于它不起作用的响应。任何方向或帮助都会很棒,在此先感谢。
解决方案
您可以使用 LiveData 解决此问题。在单独的线程中进行服务器调用。创建视图后,显示加载器并在不同的线程中进行服务器调用(不要在主线程上进行网络调用)。进行服务器调用后,开始观察结果,当您收到响应时,使用实时数据发布响应值并显示结果并隐藏您的加载器。以下是您的虚拟代码:
// 初始化可变的实时数据
private MutableLiveData<Response> networkCallResult = new MutableLiveData<>();
// 用这个获取可变的实时数据结果
public LiveData<Result> getNetworkCallResult() {
return networkCallResult;
}
在您进行网络调用的活动或片段中,调用此方法 getNetworkCallResult() 并使用以下方法观察结果:
getNetworkCallResult().observe(this, s -> {
// perform the action here.
});
收到结果时如何在实时数据中发布值?这里是。
networkCallResult.postValue(response);
希望这可以帮助。
推荐阅读
- php - PHP 代码不应更改
- c - 使用指针在 argv1 中存储命令行参数时出错
- python - 循环多个变量以应用 sound.Sound() 心理功能
- java - Java:找出对象的所有数字字段是否为0
- angular - Angular5 2方式服务之间的绑定
- c - 如何从 Windows 7 的命令行运行 PVS Studio?
- javascript - ExtJS 5.1 错误解决方法标签面板滚动
- c++ - soap_ssl_service_context 给出错误 30,gSoap
- c# - 为什么 GetManifestResourceStream 在运行时失败?
- javafx - JavaFX - 编译时的文本比 SceneBuilder 中的大