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()不应该是主要的使用点。