在NetworkBoundResource类中使用MediatorLiveData

时间:2019-11-17 15:36:05

标签: java android android-mvvm

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

1 个答案:

答案 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)) ;
            }
        });