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

无法从嵌套Firebase数据库捕获指定answer值的技术求助

解决Firebase数据库仅提取"answer"字段的问题

看起来你现在的困扰是遍历ANSWERS_LABEL下的子节点时,把每个节点里的vote count和answer都一并取出来了对吧?咱们调整下代码就能精准拿到你需要的answer值,给你两种可行的方案:


方案1:直接在循环中定位"answer"字段

这是最直接的做法,既然每个子节点里包含vote count和answer两个字段,那咱们直接在循环里指定提取answer即可:

public void onDataChange(DataSnapshot dataSnapshot) { 
    Log.v("DataSnap", dataSnapshot.toString()); 
    Log.v("DataSnap", dataSnapshot.child(USER_ID_LABEL).getValue().toString()); 
    ArrayList<String> mPollAnswers = new ArrayList<>(); 
    for (DataSnapshot y : dataSnapshot.child(ANSWERS_LABEL).getChildren()){ 
        // 精准获取当前子节点下的"answer"字段值
        String answer = y.child("answer").getValue(String.class);
        // 判空避免空指针异常
        if (answer != null) {
            mPollAnswers.add(answer);
            Log.v("ANSWER", answer);
        }
    }
}

说明:y代表ANSWERS_LABEL下的单个子节点,通过y.child("answer")直接定位到目标字段,再用getValue(String.class)将其转为字符串类型,同时加上判空逻辑更稳妥。


方案2:用实体类映射(更规范的长期方案)

如果你的投票答案节点结构固定(每个节点都有answer和vote count),建议创建一个实体类来映射数据,代码可读性和可维护性会更好:

首先定义实体类:

public class PollAnswer {
    // 字段名要和数据库里的键对应,或者用@PropertyName注解指定映射关系
    private String answer;
    private int voteCount;

    // Firebase反序列化必须要有无参构造函数
    public PollAnswer() {}

    // Getter方法
    public String getAnswer() {
        return answer;
    }

    public int getVoteCount() {
        return voteCount;
    }
}

然后在onDataChange中使用:

public void onDataChange(DataSnapshot dataSnapshot) { 
    Log.v("DataSnap", dataSnapshot.toString()); 
    Log.v("DataSnap", dataSnapshot.child(USER_ID_LABEL).getValue().toString()); 
    ArrayList<String> mPollAnswers = new ArrayList<>(); 
    for (DataSnapshot y : dataSnapshot.child(ANSWERS_LABEL).getChildren()){ 
        PollAnswer pollAnswer = y.getValue(PollAnswer.class);
        if (pollAnswer != null && pollAnswer.getAnswer() != null) {
            mPollAnswers.add(pollAnswer.getAnswer());
            Log.v("ANSWER", pollAnswer.getAnswer());
        }
    }
}

说明:这种方式把数据库节点和Java对象绑定,后续如果需要用到vote count字段,直接调用pollAnswer.getVoteCount()即可,非常方便扩展。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:37:38