最近,我在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)
}
})
我想知道上述方法不起作用的原因是什么。
您已尝试在协同程序内完成任务之前使用该值。
_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中打开它