gpt4 book ai didi

android - 无法从 Firestore 获取嵌套数据并将其显示在 Recyclerview 中

转载 作者:行者123 更新时间:2023-12-04 08:10:40 27 4
gpt4 key购买 nike

设想
当涉及到这里的实际编程时,绝对是菜鸟,他试图自己构建一个应用程序,边写边学。
我有一份文件,下面有一个交易 list 。这是我的 data structure

Collection: Transactions
-> Document: Jan2021
-> Map: <"transactions", ArrayList(Transaction[amount: String, date: Timestamp, description: String, type: String])>
要求
我想在卡片上显示交易的描述、日期和金额(“交易”数据类的一部分)。
问题
我无法(或者可能不知道如何执行此操作)获取数据并将其显示在 AlertDialog 中,更不用说获取数据并将其映射到系统中的对象了。
正在使用的代码
自定义数据类
data class TransactionDocument (
var Document: HashMap<String, Any> = hashMapOf()
)
主要 Activity
val query: Query = traRef.whereEqualTo(FieldPath.documentId(), currentMonth)
val options =
FirestoreRecyclerOptions.Builder<TransactionDocument>()
.setQuery(query, TransactionDocument::class.java)
.build()

val arr_trans: fb_adpt_transaction? = fb_adpt_transaction(options)

[...]

override fun onStart() {
super.onStart()
arr_trans!!.startListening()
}

override fun onStop() {
super.onStop()

if (arr_trans != null) {
arr_trans!!.stopListening()
}
}
适配器类
class fb_adpt_transaccion constructor(transactionsList: FirestoreRecyclerOptions<TransactionDocument>):
FirestoreRecyclerAdapter<TransactionDocument, fb_adpt_transaccion.TransactionViewHolder>(transactionsList)
{
inner class TransactionsViewHolder constructor(private val view: View) : RecyclerView.ViewHolder(view) {

fun displayValues(transaction: TransactionDocument, position: Int) {
AlertDialog.Builder(this.view.context).setMessage(transaction.toString()).show()
}
}

override fun onBindViewHolder( transactionViewHolder: fb_adpt_transaccion.TransactionsViewHolder,
position: Int,modelo: TransactionDocument)
{
transactionViewHolder.mostrarValores(modelo, position)
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): fb_adpt_transaction.TransactionViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.rv_transactions_view, parent, false)
return TransactionViewHolder(view)
}
}
到目前为止我测试过的
如果我在 MainActivity 中尝试下面的代码,显示的结果是正确的,但我无法在适配器中完成这项工作:
query.get().addOnSuccessListener {
val message = it.documents[0]["transactions"].toString()

AlertDialog.Builder(this).setMessage(message).show()
}
此外,我已经测试将数据类“TransactionDocument”(如上所示)更改为 Map,而不是 HashMap。我也试过发送一个 DocumentSnapshot(这不起作用,而且是错误的)。
任何帮助表示赞赏!

最佳答案

您代码中的问题在于文档中的“交易”属性是 不是 一个 Map,实际上是一个“事务”对象的数组。如果您想将该数组映射到自定义对象列表中,您可以查看我解释过的以下文章:

How to map an array of objects from Cloud Firestore to a List of objects?


在您的情况下,只需创建一个类:
class TransactionDocument {
public List<Transaction> transactions;
}
并使用以下方法获取相应的列表:
transactionIdRef.get().addOnCompleteListener(task -> {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
List<Transaction> transactions = document.toObject(TransactionDocument.class).transactions;
//Use the the list
}
}
});

关于android - 无法从 Firestore 获取嵌套数据并将其显示在 Recyclerview 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65985238/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com