代码之家  ›  专栏  ›  技术社区  ›  Piotr Aleksander Chmielowski

如何在不调用observe()的情况下从映射的LiveData的getValue()中获取非空结果?

  •  1
  • Piotr Aleksander Chmielowski  · 技术社区  · 6 年前

    我在用 Transformations.map LiveData 基于原稿。当 getValue null .

    实时数据 不打电话 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 回复  |  直到 6 年前
        1
  •  1
  •   Deividas Strioga    6 年前

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

    除非观察者正在观察,否则不会计算变换

    所以 mapped 必须先观察。

    编辑帖:打电话 mapped.observeForever();