Android Studio(Java)中addValueEventListener无法工作求助
问题修复方案
1. 修正数据库路径错误
你代码里的节点引用逻辑混乱,导致监听的路径与实际数据库结构不匹配:
- 初始定义
cageStatus指向cageStatus节点,但onCreate中又将其重赋值为根节点 - 监听根节点下的
temp后,又在onDataChange里尝试读取dataSnapshot.child("temp"),相当于访问/temp/temp,这和实际数据库结构不符
调整后的核心代码:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 直接获取目标节点的引用,避免重复赋值混淆 DatabaseReference tempRef = FirebaseDatabase.getInstance().getReference("temp"); progressBar = findViewById(R.id.progress2); textView = findViewById(R.id.text2); tempRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { // dataSnapshot就是temp节点本身,直接取值 temp = dataSnapshot.getValue(Integer.class); progressBar.setProgress(temp); Log.d(TAG, "temp is: " + temp); textView.setText(temp+"%"); } @Override public void onCancelled(DatabaseError databaseError) { Log.w(TAG, "Failed to read value.", databaseError.toException()); Toast.makeText(MainActivity.this, "读取数据失败", Toast.LENGTH_SHORT).show(); } }); }
2. 检查实时数据库规则
确认Firebase控制台的数据库规则允许读取操作:
- 默认规则仅授权用户可访问,若未配置认证,可临时改为测试规则(上线前务必修改):
{ "rules": { ".read": true, ".write": true } }
3. 排查网络与模拟器问题
- 确保安卓模拟器能正常联网,可通过内置浏览器验证
- 重启Android Studio和模拟器,清除可能存在的连接缓存
4. 增加日志验证路径
在onCreate中添加日志,确认数据库引用路径是否正确:
Log.d(TAG, "数据库引用路径: " + tempRef.toString());
对比日志路径与Firebase控制台的节点路径是否一致。
内容的提问来源于stack exchange,提问作者helpMe
相关产品推荐
相关产品推荐

