android - 如何管理视图模型
问题描述
我有一个具有视图模型的活动。当我调用该视图模型的 2 个方法时,首先执行第二个方法。为什么?
我该如何管理这些方法?
这是活动的 onCreate:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_news_letter);
dbViewModel = new ViewModelProvider(this).get(DBViewModel.class);
dbViewModel.getLastUpdate().observe(this, s -> {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
try {
Date date = format.parse(s);
timeStamp = (int)date.getTime() / 1000;
getAllNews(BaseCodeClass.CompanyID, timeStamp);
} catch (ParseException e) {
e.printStackTrace();
}
});
dbViewModel.getAllNews().observe(this, newsLetters ->
{
Toast.makeText(this, "3", Toast.LENGTH_SHORT).show();
});
}
在此方法中,首先执行 dbViewModel.getAllNews(),然后执行 dbViewModel.getLastUpdate()
解决方案
当您观察 aLiveData
时,它会在数据准备好或数据更改时调用onChanged
其观察者的方法。当你LiveData
以一定的顺序观察两个或多个 s 时,并不意味着观察者也会按照这个顺序被调用。它会在数据准备好时发生。这正是像LiveData
.
如果您想以确切的顺序仅读取一次这些值,则可以立即调用getValue()
并获取该值,而不是观察它们:
String s = dbViewModel.getLastUpdate().getValue();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
try {
Date date = format.parse(s);
timeStamp = (int)date.getTime() / 1000;
getAllNews(BaseCodeClass.CompanyID, timeStamp);
} catch (ParseException e) {
e.printStackTrace();
}
var newsLetters = dbViewModel.getAllNews().getValue();
Toast.makeText(this, "3", Toast.LENGTH_SHORT).show();
LiveData
这些值将按该顺序读取,但如果值更改,则不会再次调用它们。
推荐阅读
- time - Onclick 动态表中的当前时间
- java - 如何在关闭应用程序之前保存和恢复位图
- javascript - 在 for 循环中减少方法 - JS
- jupyter-notebook - 在 Jupyter Notebook 中嵌入 CloudApp 映像
- java - 编写一个仅使用 while 循环打印数字金字塔的 java 程序
- laravel - 使用 Backpack for Laravel 使用多个 Guards 进行 Laravel 身份验证
- php - 使用没有扩展名的 PHP 页面体验无写入权限
- node.js - 具有firebase功能的节点js不返回任何内容
- restheart - 创建一个休息中心 MongoInterceptor
- javascript - 如何为node.js中promise的回调函数提供文件描述符?