标签:firebaseui android firebase google-cloud-firestore
我可以手动查询Firestore并获取ID,但我使用的是FirestoreRecyclerAdapter,因为它带来了大量额外的工作.所以,如果我有这样的代码:
FirebaseFirestore db = FirebaseFirestore.getInstance();
Query query = db.collection(COLLECTION_NAME)
.whereEqualTo("userId", USER_ID)
.limit(LIMIT);
FirestoreRecyclerOptions options = new FirestoreRecyclerOptions
.Builder<SomeEntity>()
.setQuery(query, SomeEntity.class)
.build();
FirestoreRecyclerAdapter adapter = new FirestoreRecyclerAdapter<SomeEntity, MyHolder>(options) {
@Override
public void onBindViewHolder(MyHolder holder, int position, SomeEntity model) {
// I need model ID here
}
}
因此,如果我使用FirestoreRecyclerAdapter,它会自动将我的SomeEntity类反序列化为模型对象.这一切都很好,但现在我需要将监听器附加到列表中,并对模型ID做出反应.现在,如果我从Firestore手动反序列化对象,我会做这样的事情:
for (DocumentSnapshot document : task.getResult()) {
SomeEntity entity = document.toObject(SomeEntity.class).setId(document.getId());
list.add(entity);
}
但是,由于FirestoreRecyclerAdapter正在为我进行反序列化,我自己也无法调用document.getId().当我在onBindViewHolder方法时,我再也无法访问文档ID了.是否有一些我缺少的方法,某些方法从我忽略的适配器中检索ID?
注意,我不认为将ID作为字段冗余存储为解决方案.我宁愿继承并覆盖FirestoreRecyclerAdapter,但我更愿意如果没有那么多工作就可以解决这个问题.
解决方法:
当您需要文档ID时,您应该已经了解了您正在处理的项目.通常,这将是列表中项目的位置.即当用户单击某个项目时,单击处理程序将传递该项目的ID.如果您有该职位,您可以通过以下方式从适配器获取DataSnapshot:
adapter.getSnapshots().getSnapshot(position);
所以,如果你想获得这个ID,你可以得到它:
String id = adapter.getSnapshots().getSnapshot(position).getId();
标签:firebaseui,android,firebase,google-cloud-firestore 来源: https://codeday.me/bug/20190828/1747799.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。