在Google NetworkBoundResource 类中,我无法理解 MediatorLiveData的 addSource()和 removeSource()的顺序。
例如-在此构造函数中,我无法理解
a)为什么在 result.addSource(dbSource,data); 之后使用 result.removeSource(dbSource); 。我知道 addSource()用于开始向LiveData列表, removeSource()用于停止向LiveData列表 >。但是为什么我们立即停止收听LiveData的原因。
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)) ;
});
}
});
}
或者我们不能像这样使用上面的构造函数
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)) ;
}
});
}
答案 0 :(得分:0)
是的,是的,也可以使用它。
// 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)) ;
}
});