如何管理视图模型
How to manage viewmodel
我有一个具有视图模型的 activity。当我调用该视图模型的 2 个方法时,首先执行第二个方法。为什么?
我如何管理这些方法?
这是 activity 的 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()
当您观察一个 LiveData
时,它会在数据准备好或数据更改时调用其观察者的 onChanged
方法。当您按特定顺序观察两个或多个 LiveData
时,并不意味着观察者也将按该顺序被调用。它会在数据准备好时发生。这正是 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
值更改,则不会再次调用它们。
我有一个具有视图模型的 activity。当我调用该视图模型的 2 个方法时,首先执行第二个方法。为什么?
我如何管理这些方法?
这是 activity 的 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()
当您观察一个 LiveData
时,它会在数据准备好或数据更改时调用其观察者的 onChanged
方法。当您按特定顺序观察两个或多个 LiveData
时,并不意味着观察者也将按该顺序被调用。它会在数据准备好时发生。这正是 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
值更改,则不会再次调用它们。