我正在嘗試從 Firestore 獲取資料。下面的代碼大部分取自檔案,并沒有從資料庫中獲取任何內容,盡管寫入資料沒有問題。
片段代碼:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
init()
}
private fun init() {
db = FirebaseFirestore.getInstance()
mFirestoreRef = db.collection("users").document(USER_ID).collection("deals")
val viewModel = ViewModelProvider(this).get(DealsViewModel::class.java)
viewModel.retriveData(mFirestoreRef)
recyclerView = binding.rcView
adapter = TradeNoteAdapter()
recyclerView.adapter = adapter
var notes = viewModel.getAllNotes()
adapter.setList(notes)
}
來自 ViewModel 的代碼:
import android.widget.Toast
import androidx.lifecycle.ViewModel
import com.google.firebase.firestore.CollectionReference
import space.timur.tradenotefirebase.APP
import space.timur.tradenotefirebase.model.TradeNoteModel
class DealsViewModel : ViewModel() {
private var notes: ArrayList<TradeNoteModel> = ArrayList()
fun retriveData(firestoreReference: CollectionReference){
firestoreReference.get()
.addOnSuccessListener { documents ->
for(document in documents){
var note = document.toObject(TradeNoteModel::class.java)
notes.add(note)
}
}.addOnFailureListener{ e->
Toast.makeText(APP, e.message, Toast.LENGTH_SHORT).show()
}
}
fun getAllNotes(): ArrayList<TradeNoteModel> {
return notes
}
}
uj5u.com熱心網友回復:
這不是你應該如何處理 Firestore。所有 Firebase API 都是異步的,因此您無法簡單地 returnnotes作為方法的結果。為了解決這個問題,您可以使用此答案中解釋的自定義回呼,或者由于您使用的是 Kotlin,您也可以考慮使用Kotlin Coroutines,如本答案中所述。
除此之外,我強烈建議您閱讀這篇文章:
- 如何使用 get() 從 Cloud Firestore 讀取資料?
我已經解釋了處理 Firestore 的四種方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/487688.html
