當我使用下面的代碼時,我可以從 firebase 獲取資料,但是當我想使用 MVVM 訪問它時,它會回傳null.
database.collection("Order")
.get()
.addOnCompleteListener { it ->
if (it.isSuccessful) {
val itemName = it.result.documents[0].data?.get("itemName")
val id = it.result.documents[0].data?.get("id")
它回傳null內部Order.kt。我不知道那里有什么問題。我在這里找不到任何類似的問題。
FirebaseOrderService.kt
object FirebaseOrderService {
private const val TAG = "FirebaseOrderService"
suspend fun getOrderData(): Order? {
val db = FirebaseFirestore.getInstance()
return try {
db.collection("Order")
.document().get().await().toOrder()
} catch (e: Exception) {
Log.e(TAG, "Error getting order details", e)
FirebaseCrashlytics.getInstance().log("Error getting order details")
FirebaseCrashlytics.getInstance().setCustomKey("id", "1")
FirebaseCrashlytics.getInstance().recordException(e)
null
}
}
SuccessShoppingViewModel.kt
class SuccessShoppingViewModel: ViewModel() {
private val _orderList = MutableLiveData<Order>()
val order: LiveData<Order> = _orderList
init {
viewModelScope.launch {
_orderList.value = FirebaseOrderService.getOrderData()
_orderList
}
}
訂單.kt
@Parcelize
data class Order(
val id: String = "",
val picUrl: String = "",
val itemName: String = "",
val itemPrice: Double = 0.0,
val itemAmount: String = "",
val itemQuantatiy: Int = 0
) : Parcelable {
companion object {
fun DocumentSnapshot.toOrder(): Order? {
return try {
val id = getString("id")!!
val picUrl = getString("picUrl")!!
val itemName = getString("itemName")!!
val itemPrice = getLong("itemPrice")?.toDouble()!!
val itemAmount = getString("itemAmount")!!
val itemQuantatiy = getLong("itemQuantatiy")?.toInt()!!
Order(id, picUrl, itemName, itemPrice, itemAmount, itemQuantatiy)
} catch (e: Exception) {
Log.e(TAG, "Error converting order", e)
FirebaseCrashlytics.getInstance().log("Error converting order")
FirebaseCrashlytics.getInstance().setCustomKey("id", id)
FirebaseCrashlytics.getInstance().recordException(e)
null
}
}
private const val TAG = "Order"
}
}

uj5u.com熱心網友回復:
null由于以下代碼行,您得到了:
db.collection("Order")
.document().get().await().toOrder()
當您使用上述代碼行時,這意味著您正在創建對具有隨機 ID 的檔案的參考。呼叫CollectionReferenc#document()方法,不傳遞任何引數:
回傳一個 DocumentReference 指向一個新檔案,該檔案在此集合中具有自動生成的 ID。
所以你實際上在做什么,你正在創建一個指向一個不存在的檔案的參考。要解決此問題,您必須將檔案的 ID 傳遞給document()函式,如下所示:
db.collection("Order")
.document("eBW6...zIO1").get().await().toOrder()
// ??
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/521526.html
標籤:Google Cloud Collective 安卓火力基地科特林谷歌云火库
上一篇:在Python中查找和替換字符
