如何从映射的LiveData的getValue()获取非null结果而无需调用observe()?

时间:2018-08-24 12:04:51

标签: android android-livedata

我正在使用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!"
    }
}

1 个答案:

答案 0 :(得分:1)

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

  

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

因此必须首先遵守mapped

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