private fun get_rating2(review:String):Float{
val reviewref = RTDBref.child(review)
val ratinglist = arrayListOf<Int>()
var average_rating = 0.0f
reviewref.get().addOnSuccessListener { reviewsnap ->
reviewsnap.children.forEach { ratingsnap ->
val rating = ratingsnap.child("rating").getValue<Int>()
ratinglist.add(rating!!)
}
average_rating = ratinglist.average().toFloat()
//I need this average_rating Inside of lambda
}
return average_rating
//this average_rating does not return proper value because It is not in lambda
}
如何在 lambda 內部回傳一個變數?
我需要使用average_ratinglambda 內部..
uj5u.com熱心網友回復:
這不是 lambda 作用域,它是介面函式作用域,所以如果你想average_rating在介面函式內部做一些事情,get_rating2(review:String)當你需要等待一個介面時回傳函式值是錯誤的,對于你的代碼,它總是 0.0f
所以這樣做:
private fun get_rating2(review:String){
val reviewref = RTDBref.child(review)
val ratinglist = arrayListOf<Int>()
reviewref.get().addOnSuccessListener { reviewsnap ->
var average_rating = 0.0f
reviewsnap.children.forEach { ratingsnap ->
val rating = ratingsnap.child("rating").getValue<Int>()
ratinglist.add(rating!!)
}
average_rating = ratinglist.average().toFloat()
doSomthingWith(average_rating)
}
}
uj5u.com熱心網友回復:
如果您在專案中使用協程,則只需為您的案例使用掛起功能。
suspend fun getAverageRating(): Float = suspendCancellableCoroutine { continuation ->
reviewref.get().addOnSuccessListener { reviewsnap ->
...
continuation.resumeWith(Result.success(ratinglist.average().toFloat()))
}
// don't remember unsubscribe you listener on cancellation
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/342582.html
下一篇:如何找到一個序列的最大數?
