我正在使用Transformations.map方法基于原始方法获取新的LiveData。原始的getValue方法始终返回正确的值,而映射到的相同访问器则返回null

我如何解决或解决此问题,以测试暴露LiveData的类而无需调用observe

这是解释此问题的代码:

public class LiveDataTest {

    @Rule
    public TestRule rule = new InstantTaskExecutorRule();

    @Test
    public void mapTest() {
        final MutableLiveData<String> original = new MutableLiveData<>();
        final LiveData<String> mapped = Transformations.map(original, input -> "Mapped: " + input);

        System.out.println(original.getValue()); // null - OK
        System.out.println(mapped.getValue()); // null - OK

        original.setValue("Hello, World!");

        System.out.println(original.getValue());  // "Hello, World!" - OK
        System.out.println(mapped.getValue()); // null - Should be "Mapped: Hello, World!"
    }
}

最佳答案

从文档https://developer.android.com/reference/android/arch/lifecycle/Transformations


  除非观察者正在观察,否则不会计算转换
  返回的LiveData对象。


因此,必须首先观察mapped

编辑帖子:只需调用mapped.observeForever();传入空的观察者,然后再尝试获取映射值。

10-04 20:02