当前位置: 首页 > 知识库问答 >
问题:

为什么在使用get()而不是Transforamtion时,LiveData会返回null。开关地图?

公风史
2023-03-14

最近,我在observer上使用了MVVM架构和Livedata。我可以使用转换。switchmap()。但我想用另一种方法。我不知道这是否正确。我从存储库返回了livedate值,然后得到可变的实时数据。然后通过get()将其分配给Livedata。最后在片段中使用观察者。没用。它似乎返回空值,而不是由新值触发。

存储库:

   fun getReviewPlace(idPlace:String): LiveData<MutableList<CommentModel>>
    {
         val Reviews:MutableLiveData<MutableList<CommentModel>> = MutableLiveData()
        CoroutineScope(Dispatchers.IO).launch {
            val requestReviews = ServiceBuilder.apiServiceFake.getReviewPlace(idPlace)
            if (requestReviews.isSuccessful)
            {
                withContext(Dispatchers.Main) {
                    Reviews.value = requestReviews.body()
                }
            }
        }
        return Reviews
    }

视图模型:

private var _Reviews:MutableLiveData<MutableList<CommentModel>> = MutableLiveData(mutableListOf())
val Reviews:LiveData<MutableList<CommentModel>> get () = _Reviews


fun getReviews(id:String)
{
    _Reviews.value=AllInfoRepository.getReviewPlace(id).value
}

片段:

        lateinit var myViewModel: allInfoViewModel
        myViewModel=ViewModelProviders.of(this).get(allInfoViewModel::class.java)
        myViewModel.getReviews(myId)
        myViewModel.Reviews.observe(viewLifecycleOwner, Observer { ReviewsList ->
         if(ReviewsList!=null) {
            RVReviews.adapter = RVAdapterCommentOutsideInfo(mycontext, ReviewsList, 2)
            }
          else{
          //it seems ReviewsList is always return null
          }
         })

编辑:我知道我可以直接返回LiveData值到片段,就像在视图模型中这样:

fun getReviews(id:String)=AllInfoRepository.getReviewPlace(id)

那么观察者应该是:

    myViewModel.getReviews(myId).observe(viewLifecycleOwner, Observer { ReviewsList ->
        if(ReviewsList!=null) {
            RVReviews.adapter = RVAdapterCommentOutsideInfo(mycontext, ReviewsList, 2)
        }
    })

我想知道上述方法不起作用的原因是什么。

共有1个答案

艾翼
2023-03-14

您已尝试在协同程序内完成任务之前使用该值。

_Reviews.value=AllInfoRepository.getReviewPlace(id).value

此时,您的实时数据val评论:MutableLiveData

 类似资料:
  • 根据JSON规范,表示null值的正确方法是文字。 预期结果: 实际结果:

  • 问题内容: 据我所知,使用或实例化对象分别返回或的新实例。具有 新标识 的新实例对象。 在我实际测试它之前,这对我来说是很清楚的,我注意到它实际上返回了而不是预期的: 如预期的那样,分别使用和创建对象时,也会表现出这种行为: 我可以在状态文档中找到唯一相关的信息: […]例如,return和return 。 如果未提供任何参数,则构造函数将创建一个新的空元组。 可以说,这不足以回答我的问题。 那么

  • 问题内容: 我必须编写一个例程,如果变量的类型为,则将变量的值加1,否则将变量的值分配为0,其中变量的初始值为或。 第一个实现是因为我认为没有数字会使算术表达式为假,但是由于计算为真,所以这是错误的。然后,我得知行为类似于0,并且以下表达式均被评估为true。 当然不是0。被评估为false。这使看似重言式的表达成为错误。 为什么实际上不是0,却像0? 问题答案: 您真正的问题似乎是: 为什么:

  • 代码段用于获取从文本文件中提取的一行文本,将其分离为单独的标记,并将每个标记存储在数组的索引中。起初我以为问题出在文本文件上,但是直接将字符串放入编辑器并不能解决这个问题。 使用字符串,如: 带分隔符的StringTokenizer对象返回前四个标记作为正确的字符串,但其余四个标记为null。 有趣的是,另一个字符串: “Gnollnonegeralany222taunttaunt” 鸡肉没有野兽

  • 问题内容: 根据手册页: 返回值 成功完成后,将返回0。否则,将返回并且设置全局变量以指示错误。在任何一种情况下,对该流的任何进一步访问(包括对的另一个调用)都会导致未定义的行为。 错误 底层的文件描述符无效。 该函数也可能会失败,并设置为例程指定的任何错误,或者。 当然应该失败,但是我希望它以正常方式返回,而不是直接因分段错误而死亡。是否有任何这种行为的原因? 提前致谢。 更新:我将把代码放在这

  • 问题内容: 这是简单的代码,我没有得到设置位图的结果,而是得到了null。谁能告诉我我在哪里犯错了? 更新 好的,所以我无法像我想的那样将文本转换为图像。这样呢 这会创建位图吗? 问题答案: 从文档中: 返回 解码的位图;如果无法解码图像,则 返回 null。 字符串“ test”中涉及的字节不是有效的位图,对吗? 如果将文本“ test”保存在名为or 等的文件中,并试图在Windows中打开它