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

Android Studio中Firebase的onDataChange无限加载问题排查

Firebase Realtime Database onDataChange无限加载问题解决

问题背景

调用addListenerForSingleValueEvent()后,onDataChange()持续无限加载,无法从Firebase Realtime Database获取数据。该功能此前正常运行6个月,无征兆突然失效。已尝试重新安装google-services.json文件、检查数据库访问权限,均无效果。启用Firebase调试日志后,发现报错为com.google.firebase.database.tubesock.WebSocketException: unknown host: #####.firebaseio.com,问题与WiFi网络环境相关。

解决方法

在获取FirebaseDatabase实例后,添加goOffline()和goOnline()调用,重置数据库连接状态:

FirebaseDatabase database = FirebaseDatabase.getInstance();
// 重置数据库连接,解决WebSocket未知主机问题
database.goOffline();
database.goOnline();

DatabaseReference usersRef = database.getReference().child("users");

usersRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        if (!dataSnapshot.child(userName).exists()) {
            Toast.makeText(LogInActivity.this,"Incorrect credentials were entered!", Toast.LENGTH_SHORT).show();
            return;
        }
        else if (!dataSnapshot.child(userName).child("password").getValue().toString().equals(et_enterPassword.getText().toString())) {
            Toast.makeText(LogInActivity.this,"Incorrect credentials were entered!", Toast.LENGTH_SHORT).show();
            return;
        }

        Intent homePageIntent = new Intent(LogInActivity.this, HomePageActivity.class);
        startActivity(homePageIntent);
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {
       Toast.makeText(LogInActivity.this,"An error occurred!", Toast.LENGTH_SHORT).show();
    }
});

说明

goOffline()会强制断开当前的WebSocket连接并清除缓存的连接状态,goOnline()则重新初始化与Firebase数据库的连接,以此解决因DNS解析异常或WebSocket连接状态紊乱导致的“未知主机”问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:32:47