Android中Firebase登录后如何仅显示特定用户的SQLite数据?
解决Firebase认证与SQLite用户数据关联的问题
核心逻辑
要实现仅展示当前登录用户的数据,核心是给每条SQLite数据绑定Firebase用户的唯一UID,查询时只筛选当前用户UID对应的数据。
具体实现步骤
1. 调整SQLite表结构
在存储用户业务数据的表中新增一个user_uid字段(TEXT类型),用来存储Firebase用户的唯一标识。示例建表语句:
CREATE TABLE IF NOT EXISTS user_records ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, content TEXT NOT NULL, user_uid TEXT NOT NULL -- 关联Firebase用户UID的字段 );
2. 写入数据时绑定UID
每次向SQLite插入数据前,先获取当前登录用户的UID,再把UID和业务数据一起存入表中:
FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser(); if (currentUser != null) { String uid = currentUser.getUid(); // 封装数据,包含user_uid字段 ContentValues values = new ContentValues(); values.put("title", "示例标题"); values.put("content", "示例内容"); values.put("user_uid", uid); // 插入到SQLite db.insert("user_records", null, values); }
3. 查询数据时筛选当前用户的UID
查询SQLite数据时,通过WHERE条件指定当前用户的UID,只返回该用户的数据:
FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser(); if (currentUser != null) { String uid = currentUser.getUid(); Cursor cursor = db.query( "user_records", null, "user_uid = ?", // 筛选条件 new String[]{uid}, // 绑定参数,防止SQL注入 null, null, null ); // 遍历cursor处理当前用户的专属数据 if (cursor.moveToFirst()) { do { String title = cursor.getString(cursor.getColumnIndexOrThrow("title")); // 处理数据逻辑 } while (cursor.moveToNext()); } cursor.close(); }
4. 未登录状态处理
如果用户未登录,直接限制数据读写操作,比如跳转到登录页:
FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser(); if (currentUser == null) { Intent intent = new Intent(this, LoginActivity.class); startActivity(intent); return; }
参考资源方向
- Firebase官方文档中
FirebaseUser类的相关说明,重点掌握getUid()方法的使用场景 - Android官方SQLite开发指南,学习带参数查询的写法和表结构设计规范
内容的提问来源于stack exchange,提问作者Lasma
相关产品推荐
相关产品推荐

