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

如何解决Firestore get()空对象引用错误及TextView不显示问题

问题分析与解决

核心问题:空指针与文档引用错误

你的代码中db.collection("measurement").getParent()是错误逻辑——当measurement是根级集合时,getParent()会返回null,后续调用measurementdata.get()直接触发空对象引用错误,这也是TextView无内容的根本原因。

修复步骤

  1. 修正文档/集合引用
    你需要明确目标数据的位置:

    • 如果要获取measurement集合下的单个具体文档,需指定文档ID:
      DocumentReference measurementdata = db.collection("measurement").document("目标文档ID");
      
    • 如果要获取measurement集合下的所有文档,直接调用集合的get()方法:
      db.collection("measurement").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
          @Override
          public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
              for (DocumentSnapshot doc : queryDocumentSnapshots) {
                  MeasurementAdapter measurementAdapter = doc.toObject(MeasurementAdapter.class);
                  // 处理单条数据逻辑
              }
          }
      });
      
  2. 添加数据有效性检查
    获取文档后必须先校验文档存在性,避免空对象异常:

    @Override
    public void onSuccess(DocumentSnapshot documentSnapshot) {
        if (documentSnapshot.exists()) {
            MeasurementAdapter measurementAdapter = documentSnapshot.toObject(MeasurementAdapter.class);
            if (measurementAdapter != null) {
                String length = measurementAdapter.getLength();
                String shoulder = measurementAdapter.getShoulder();
                detailLength.setText(length);
                detailShoulder.setText(shoulder);
            }
        } else {
            detailLength.setText("未找到对应数据");
        }
    }
    
  3. 校验实体类映射规则
    确保MeasurementAdapter类满足Firestore序列化要求:

    • 必须包含无参构造函数
    • 字段名与Firestore文档字段名一致,或用@PropertyName指定映射:
      public class MeasurementAdapter {
          private String length;
          private String shoulder;
      
          public MeasurementAdapter() {} // 必须保留无参构造
      
          public String getLength() { return length; }
          public void setLength(String length) { this.length = length; }
      
          public String getShoulder() { return shoulder; }
          public void setShoulder(String shoulder) { this.shoulder = shoulder; }
      }
      
  4. 添加失败监听排查问题
    追加失败回调,查看具体错误信息:

    measurementdata.get()
            .addOnSuccessListener(...)
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Log.e("FirestoreErr", "数据获取失败: " + e.getMessage());
                }
            });
    

内容的提问来源于stack exchange,提问作者Bhadra Vaghela

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:52:14