Android:从Firestore获取当前用户上传书籍并展示于RecyclerView
实现当前用户上传书籍的展示方案
1. 确保Book实体类包含用户ID字段
你的Book数据类需要新增userId字段,用于存储上传该书籍的用户ID,这是筛选当前用户书籍的核心依据:
data class Book( val bookName: String, val createdAt: Long, // 保留你现有其他字段 val userId: String // 新增字段:存储上传者的用户ID )
2. 修改BookDao的addBook方法,存储上传用户ID
上传书籍时,需要将当前登录用户的ID写入Book对象,修改addBook方法:
class BookDao { private val db = FirebaseFirestore.getInstance() val bookCollection = db.collection("books") private val auth = FirebaseAuth.getInstance() // 新增FirebaseAuth实例 fun addBook(book: Book?){ val currentUser = auth.currentUser ?: return // 用户未登录则直接返回 if (book!= null) { // 为Book对象补充当前用户ID val bookWithUserId = book.copy(userId = currentUser.uid) bookCollection.document(book.bookName).set(bookWithUserId) } } }
3. 实现byBooks按钮的点击事件逻辑
在个人资料页面的Fragment/Activity中,给byBooks按钮绑定点击事件,构建专属查询并初始化RecyclerView:
// 示例:在ProfileFragment中编写逻辑 val bookDao = BookDao() val auth = FirebaseAuth.getInstance() val currentUserId = auth.currentUser?.uid ?: return // 未登录则终止逻辑 byBooks.setOnClickListener { // 构建查询:筛选userId等于当前用户ID的书籍,按创建时间倒序排列 val query = bookDao.bookCollection .whereEqualTo("userId", currentUserId) .orderBy("createdAt", Query.Direction.DESCENDING) // 创建FirestoreRecyclerOptions val recyclerViewOptions = FirestoreRecyclerOptions.Builder<Book>() .setQuery(query, Book::class.java) .build() // 初始化适配器(若布局和首页一致,可直接复用HomeAdapter) val userBooksAdapter = HomeAdapter(recyclerViewOptions) // 绑定RecyclerView userBooksRecyclerView.adapter = userBooksAdapter // 启动Firestore数据监听 userBooksAdapter.startListening() }
4. 生命周期管理(避免内存泄漏)
如果是在Fragment中,需要在生命周期方法中管理适配器的监听状态:
private var userBooksAdapter: FirestoreRecyclerAdapter<*, *>? = null override fun onStart() { super.onStart() userBooksAdapter?.startListening() } override fun onStop() { super.onStop() userBooksAdapter?.stopListening() }
额外提示
- 确保FirebaseAuth已正确配置,能正常获取用户登录状态
- 若存在书籍名称重复的情况,建议用Firestore自动生成的文档ID作为存储键(
bookCollection.add(bookWithUserId)),避免覆盖已有书籍 - 如果需要对用户书籍做特殊UI处理,可以单独创建
UserBooksAdapter继承FirestoreRecyclerAdapter
内容的提问来源于stack exchange,提问作者Divyansh Singh
相关产品推荐
相关产品推荐

