我正在使用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();
传入空的观察者,然后再尝试获取映射值。