簡體   English   中英

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")
            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM