我正在使用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!"
}
}
答案 0 :(得分:1)
来自文档https://developer.android.com/reference/android/arch/lifecycle/Transformations:
除非观察者正在观察,否则不计算转换 返回的LiveData对象。
因此必须首先遵守mapped
。
要编辑帖子,只需调用mapped.observeForever();
传递空的观察者,然后再尝试获取映射值。