gpt4 book ai didi

java - NetworkBoundResource 类中 MediatorLiveData 的使用

转载 作者:行者123 更新时间:2023-12-01 21:10:43 25 4
gpt4 key购买 nike

在 Google NetworkBoundResource 类中,我无法理解 MediatorLiveData 的 addSource()removeSource() 的顺序被使用。

例如--在这个构造函数中我无法理解

a)为什么result.removeSource(dbSource);result.addSource(dbSource, data);之后使用。我知道 addSource() 用于开始监听 LiveDataremoveSource() 用于停止监听 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)) ;
}
});
}

最佳答案

是的,是的,也可以使用这个。

// 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)) ;
}
});

关于java - NetworkBoundResource 类中 MediatorLiveData 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58902127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com