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

如何从Firebase数据库中仅提取指定节点的Rupees值?

解决Firebase数据库提取指定节点Rupees值到TextView的问题

嘿,我看了你的代码,发现几个小问题导致你没法正确获取Rupees的值,咱们一步步来修正:

问题分析

  1. 不必要的循环操作:你已经把d2ref指向了Standard 1st节点,dataSnapshot就是这个节点的完整快照,不需要遍历它的子节点——这会让你重复执行取值逻辑,甚至可能取错值。
  2. 取值逻辑错误:在循环里你用dataSnapshot.child("Rupees"),但如果Standard 1st的子节点不止Rupees,这个操作其实是在重复读取同一个值,完全没必要。
  3. 空指针风险:直接调用getValue().toString()如果值为null会导致崩溃,得先做非空判断。

修正后的代码

public class Collection extends AppCompatActivity {
    TextView ttl;
    Button btnshw;
    DatabaseReference d2ref;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_collection);
        ttl = findViewById(R.id.texirs); // Android Studio 3.0+无需强转,支持自动类型转换
        btnshw = findViewById(R.id.bshow);
        
        btnshw.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 确认路径完全匹配Firebase里的节点名称(大小写、空格都不能错)
                d2ref = FirebaseDatabase.getInstance().getReference()
                        .child("2018-19")
                        .child("Gat No 14")
                        .child("School no 109")
                        .child("Standard 1st");
                
                d2ref.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        // 直接从Standard 1st节点下获取Rupees的值
                        String rupeesValue = dataSnapshot.child("Rupees").getValue(String.class);
                        
                        // 处理空值,避免崩溃
                        if (rupeesValue != null) {
                            ttl.setText(rupeesValue);
                            Log.d("Tag", "获取到的Rupees值:" + rupeesValue);
                        } else {
                            ttl.setText("未找到Rupees数据");
                            Log.d("Tag", "Rupees节点不存在或值为null");
                        }
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {
                        // 打印错误信息,方便调试排查问题
                        Log.e("FirebaseError", "读取数据失败:" + databaseError.getMessage());
                    }
                });
            }
        });
    }
}

额外调试建议

  • 检查Firebase数据库规则:确保你的数据库规则允许读取操作,调试阶段可以暂时设置成公开读取(上线后务必改回安全规则):
    {
      "rules": {
        ".read": true,
        ".write": true
      }
    }
    
  • 确认节点路径完全一致:Firebase的节点名称区分大小写和空格,比如Gat No 14不能写成gat no 14,一定要和数据库里的节点名称完全匹配。
  • 查看Logcat日志:如果还是没数据,看看Logcat里的Tag和FirebaseError日志,能帮你快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:26:22