Java 在NetworkBoundResource类中使用MediatorLiveData

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

在GoogleNetworkBoundResource类中,我无法理解MediaLiveData的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)) ;
                });
            }
        });
    }
受保护的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)) ;
            }
        });

你能给我解释一下第一个吗?