Android 如何在不调用observe()的情况下从映射的LiveData的getValue()获取非空结果?
我正在使用Android 如何在不调用observe()的情况下从映射的LiveData的getValue()获取非空结果?,android,android-livedata,Android,Android Livedata,我正在使用Transformations.map方法在原始方法的基础上获得一个新的LiveData。虽然原始的getValue方法始终返回正确的值,但映射的on的相同访问器返回null 如何解决或解决此问题,以便在不调用observe的情况下测试暴露LiveData的类 下面是解释此问题的代码: public class LiveDataTest { @Rule public TestRule rule = new InstantTaskExecutorRule();
Transformations.map
方法在原始方法的基础上获得一个新的LiveData
。虽然原始的getValue
方法始终返回正确的值,但映射的on的相同访问器返回null
如何解决或解决此问题,以便在不调用observe
的情况下测试暴露LiveData
的类
下面是解释此问题的代码:
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!"
}
}
公共类LiveDataTest{
@统治
public TestRule rule=new InstantTaskExecutorRule();
@试验
公共void映射测试(){
final MutableLiveData original=新的MutableLiveData();
final LiveData mapped=Transformations.map(原始,输入->“映射:”+input);
System.out.println(original.getValue());//null-OK
System.out.println(mapped.getValue());//null-OK
setValue(“你好,世界!”);
System.out.println(original.getValue());/“你好,世界!”-好的
System.out.println(mapped.getValue());//null-应该是“mapped:Hello,World!”
}
}
来自文档:
除非观察者正在观察,否则不会计算变换
返回的LiveData对象
因此,必须首先观察映射的
编辑帖子:只需调用
mapped.observeforevir()代码>在尝试获取映射值之前,传入空的观察者。谢谢!阅读您的答案后,我重新表述了问题-我正在寻找解决此问题的方法,以便在不调用观察的情况下执行测试。更新了我的答案。测试应该没问题。实际上根本不使用观察者不仅是不可能的,而且也不推荐。以下是我的测试中的一些代码(在kotlin中,但想法应该很清楚):val sweetsRatingObserver:Observer=mock()viewModel.sweetsRatingData.observeForever(sweetsRatingObserver)然后(sweetsRatingObserver.should().onChanged(sweetsRating)
其中sweetsRating是预期值。我认为测试更改也是最合适的,因为LiveData的getValue()不应该是主要的使用点。