You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:40:44