Android: Kotlin 从回调中获取数据并随流发出

Android: Kotlin getting data from callback and emit with flow

大家,我有这个方法,想发出listmessage但是list无法获取值列表,我该怎么办?

fun ReadMessage(dialog: QBChatDialog) = flow{
        try {
                
                    var list: ArrayList<QBChatMessage> = ArrayList()
            chatHelper.ReadChatHistory(dialog, object : QBEntityCallback<ArrayList<QBChatMessage>>{
                override fun onSuccess(listmessage: ArrayList<QBChatMessage>?, p1: Bundle?) {
                    Log.e(TAG, "Reading Message: $p0")
                }
                override fun onError(p0: QBResponseException?) {
                    Log.e(TAG, "Reading Message Exception: $p0")
                }
            })
            Log.e(TAG, "Reading Messageeeeeeeeee: $list")
            emit(list)
        }catch (e: Exception){
            Log.e(TAG, "Reading Message Exceptionn: $e")
        }
    }

你应该使用 CompletableDeferred。你可以这样做:

    fun readMessage(dialog: QBChatDialog): Flow<ArrayList<QBChatMessage>> {
        val historyDeferred = CompletableDeferred<ArrayList<QBChatMessage>>()
        chatHelper.ReadChatHistory(dialog, object : QBEntityCallback<ArrayList<QBChatMessage>> {
            override fun onSuccess(listmessage: ArrayList<QBChatMessage>?, p1: Bundle?) {
                historyDeferred.complete(listmessage ?: arrayListOf())
            }

            override fun onError(p0: QBResponseException?) {
                historyDeferred.completeExceptionally(p0 ?: CancellationException())
            }
        })
        return flow {
            try {
                emit(historyDeferred.await())
            } catch (e: Exception) {
                Log.e(TAG, "Reading Message Exceptionn: $e")
            }
        }
    }