FireStore用户文档子集合创建问题及auth.getUid()空指针报错
解决
auth.getUid()空对象引用问题 1. 确认Auth实例已正确初始化
出现空指针的首要原因可能是auth对象未完成初始化,在调用getUid()前必须先获取FirebaseAuth实例:
// 在方法内或类初始化阶段完成实例获取 FirebaseAuth auth = FirebaseAuth.getInstance();
如果auth是类成员变量,建议在onCreate等生命周期方法中完成初始化,避免未赋值就调用方法。
2. 先验证用户登录状态
getUid()返回null说明当前没有已登录的用户,必须先确认用户登录状态再执行数据库操作:
private void show() { FirebaseAuth auth = FirebaseAuth.getInstance(); FirebaseUser currentUser = auth.getCurrentUser(); // 先判断用户是否已登录 if (currentUser == null) { Log.d("auth_error", "当前无登录用户"); // 可在此处添加跳转登录页面等逻辑 return; } // 确认登录后再使用UID访问数据库 DocumentReference docRef = db.collection("users").document(currentUser.getUid()) .collection("myPentry").document("FQpG5QWFiJ4xStsiDING"); docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() { @Override public void onComplete(@NonNull Task<DocumentSnapshot> task) { if (task.isSuccessful()) { DocumentSnapshot document = task.getResult(); if (document.exists()) { String banco = document.getString("description"); edPantry.setText(banco); edPantry.setSelection(edPantry.getText().length()); } else { Log.d("n", "No such document"); } } else { Log.d("erro", "get failed with ", task.getException()); } } }); }
3. 推荐:监听Auth状态变化
如果页面可能在用户未登录时被打开,设置Auth状态监听器能确保仅在用户登录后执行数据库操作:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); FirebaseAuth auth = FirebaseAuth.getInstance(); auth.addAuthStateListener(new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) { // 用户已登录,执行数据加载逻辑 show(); } else { // 用户未登录,处理登录跳转等逻辑 } } }); }
4. 排查其他潜在问题
- 确保
db(FirebaseFirestore实例)也已正确初始化:FirebaseFirestore db = FirebaseFirestore.getInstance(); - 避免在未完成初始化的生命周期阶段(如
onCreate之前)调用show()方法
内容的提问来源于stack exchange,提问作者Pedro Tartari
相关产品推荐
相关产品推荐

