Java 在NetworkBoundResource类中使用MediatorLiveData
在GoogleNetworkBoundResource类中,我无法理解MediaLiveData的addSource()和removeSource()的使用顺序 例如--在这个构造函数中,我无法理解 a)为什么result.removeSource(dbSource)仅在result.addSource(dbSource,data)之后使用。我知道addSource()用于开始登录到LiveData,removeSource()用于停止登录到LiveData。但是如果我们立即停止收听LiveData,为什么我们要开始收听它呢Java 在NetworkBoundResource类中使用MediatorLiveData,java,android,android-mvvm,Java,Android,Android Mvvm,在GoogleNetworkBoundResource类中,我无法理解MediaLiveData的addSource()和removeSource()的使用顺序 例如--在这个构造函数中,我无法理解 a)为什么result.removeSource(dbSource)仅在result.addSource(dbSource,data)之后使用。我知道addSource()用于开始登录到LiveData,removeSource()用于停止登录到LiveData。但是如果我们立即停止收听LiveDa
protected NetworkBoundResource() {
result.setValue(Resource.loading(null));
// Always load the data from DB intially so that we have
LiveData<T> dbSource = loadFromDb();
// Fetch the data from the network and add it to the resource
result.addSource(dbSource, data -> {
result.removeSource(dbSource);
if (shouldFetch()) {
fetchFromNetwork(dbSource);
} else {
result.addSource(dbSource, newData -> {
if(null != newData)
result.setValue(Resource.success(newData)) ;
});
}
});
}
受保护的NetworkBoundResource(){
result.setValue(Resource.loading(null));
//始终从DB初始加载数据,以便
LiveData dbSource=loadFromDb();
//从网络获取数据并将其添加到资源
result.addSource(dbSource,数据->{
结果:removeSource(dbSource);
if(shouldFetch()){
从网络(dbSource)获取数据;
}否则{
result.addSource(dbSource,newData->{
if(null!=newData)
result.setValue(Resource.success(newData));
});
}
});
}
或者我们不能像这样使用上述构造函数吗
protected NetworkBoundResource() {
result.setValue(Resource.loading(null));
// Always load the data from DB intially so that we have
LiveData<T> dbSource = loadFromDb();
// Fetch the data from network and add it to the resource
result.addSource(dbSource, data -> {
if (shouldFetch()) {
fetchFromNetwork(dbSource);
result.removeSource(dbSource);
} else {
if(null != data)
result.setValue(Resource.success(data)) ;
}
});
}
受保护的NetworkBoundResource(){
result.setValue(Resource.loading(null));
//始终从DB初始加载数据,以便
LiveData dbSource=loadFromDb();
//从网络获取数据并将其添加到资源
result.addSource(dbSource,数据->{
if(shouldFetch()){
从网络(dbSource)获取数据;
结果:removeSource(dbSource);
}否则{
if(null!=数据)
result.setValue(Resource.success(data));
}
});
}
是的,我也可以用这个
// Fetch the data from network and add it to the resource
result.addSource(dbSource, data -> {
if (shouldFetch()) {
fetchFromNetwork(dbSource);
result.removeSource(dbSource);
} else {
if(null != data)
result.setValue(Resource.success(data)) ;
}
});
你能给我解释一下第一个吗?