我遵循了这个例子,一个集成的ViewModel
和LiveData
.
我习惯于交流LiveData
,习惯于交流ViewModel
Repository
activity
ViewModel
我想澄清这个问题的困惑很少。
这工作正常,并在 MainActivity 5 秒后显示 Toast 消息。
主要活动
MainViewModel homeViewModel = ViewModelProviders.of(this).get(MainViewModel.class);
homeViewModel.getResponseval().observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
Toast.makeText(getApplicationContext(), "MainActivityObserverCalled", Toast.LENGTH_LONG).show();
}
});
主视图模型
public class MainViewModel extends ViewModel {
public MutableLiveData<String> responseval;
private LoginRepositry loginRepositry;
public MainViewModel(){
loginRepositry = new LoginRepositry();
responseval = loginRepositry.getData("username","password");
}
public MutableLiveData<String> getResponseval() {
return responseval;
}
登录存储库
public class LoginRepositry {
private MutableLiveData<String> data = new MutableLiveData<>();
public MutableLiveData<String> getData(String username , String userpass) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
data.setValue("Login Repo Set Value");
}
}, 5000);
return data;
}
这是我的2个问题。
现在使用每种方法,我都返回了一些类型
LiveData
的数据,但是在返回数据时,没有设置值。我是5秒后设置data.setValue("SomeValue")
的,那么return
这里有什么用,是不是因为方法返回类型的原因,万一发生什么都不做LiveData
在
MainActivity
,我习惯于homeViewModel.getResponseval().observe
观察数据,但在ViewModel
,我没有使用observe
,但 ViewModel 仍在观察,Repository
并且 5 秒后 MainActivity 得到结果。我无法理解这里发生了什么。