如何使用 Firestore 文档字段的 HashMap 键值并填充回收器视图?



我刚刚开始学习android。我想知道的是一种方法,我可以使用firebase文档的字段填充一个RecyclerView,其中只包含HashMap键和值。如果我问错了问题,很抱歉。我只是想知道这是否可能?这是firebase的快照

请注意-我知道如何将项目(我存储在地图中)作为单独的文档存储在集合中,并制作RecyclerView。目前,我只使用此方法并填充RecyclerView。但是我不想将这些项作为单独的文档存储。

这是需要的输出…需要reyclerview

public class ModelTrans{
Double RecentAmount;
String TransText;
String Transactionid;
@ServerTimestamp
Date date;
int img;
public ModelTrans() {
}
public ModelTrans(Double recentAmount, String transText, String transactionid, Date date, int img) {
RecentAmount = recentAmount;
Transtext = transText;
Transactionid = transactionid;
this.date = date;
this.img = img;
}
......other getter setters
}

既然您说您已经将这些对象添加到集合中并且它工作了,那么您也可以在文档中做同样的事情。你所要做的就是创建一个指向特定文档的引用,然后读取它。

文档的每个字段都是一个类型为ModelTrans的对象。要获取这些数据,您应该使用以下代码行:

joinedContestRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
List<ModelTrans> transList = new ArrayList<>();
Map<String, Object> map = document.getData();
for(Map.Entry<String, Integer> entry : map.entrySet()) {
String key = entry.getKey();
Map<String, Object> value = (Map<String, Object>) entry.getValue();
//Iterate again and add the data to a transList.
}
} else {
Log.d(TAG, "No such document");
}
} else {
Log.d(TAG, "get failed with ", task.getException());
}
}
});

如您所见,我使用了DocumentSnapshot#getData()方法,该方法返回Map<String,>类型的对象。你现在要做的,是遍历地图,获取其中的数据。实际上你只需要这些值。最后,只需将这些值添加到List中,然后将List传递给适配器。这应该就差不多了。

编辑:

你的评论说得好。我应该从一开始就把它加进去的。

是的,在单个文档中可以放入多少数据是有限制的。根据有关使用和限制的官方文档:

最大文件大小:1 MiB(1,048,576字节)

正如您所看到的,您在单个文档中被限制为总共1 MiB的数据。因此,请注意这个限制,否则,您的写操作可能会开始失败。

最新更新