【发布时间】:2021-02-04 15:42:17
【问题描述】:
所有人都想更新可变列表中的值,但是这里跳出的循环是我的代码 sn-p。
for ((i, dataObject) in data.withIndex()) {
channelsObject.getChannel(
dataObject.remoteChannelId,
ChatCallbackListener<Channel>() {
Log.e("last friend", it.friendlyName)
it!!.messages?.getLastMessages(1, ChatCallbackListener<List<Message>>() {
if (it.size > 0)
if (it.get(0).hasMedia()) {
dataObject.isAttachement = true
dataObject.lastMessage = "attachment"
} else {
dataObject.lastMessage = it.get(0).messageBody
dataObject.lastMessageDataAndTime = it.get(0).dateCreated
})
})
setThreadAdapter(data)
}
我无法更新数据类的两个值,看起来循环在获取消息之前跳出,非常感谢任何帮助。
谢谢
【问题讨论】:
-
回调是在未来某个时间收到结果时运行的代码。循环不会提前退出,但在循环完成之前不会调用回调。
-
那么解决办法是什么?
-
我不知道你在说什么。我假设你的对象最终会被修改,但我不知道你正在使用什么 API。您可以创建一个计数器,每个侦听器都会递增,当它达到集合大小时,您会对现在完全修改的集合做出反应。或者您可以创建一个帮助程序,将 API 代码转换为挂起函数并在协程中使用它。这将产生最干净的代码。
-
我正在使用 twilio 可编程聊天回调来接收每个频道的最后一条消息
-
在 ChatCallbackListener 中调用 setThreadAdapter(data)
标签: android kotlin mutablelivedata