Firebase卡在没有INTERNET连接上

Ari*_*Roy 15 android firebase firebase-realtime-database

在我的应用中,我使用的是Firebase数据库.现在,当我正在侦听特定位置的子节点的任何更改时,如果没有Internet连接,则不会触发回调.firebase电话被卡住了.

我用这个,

FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
firebaseDatabase.setPersistenceEnabled(true);
Run Code Online (Sandbox Code Playgroud)

因此,启用了持久性.问题只出现在一个场景中.当Firebase的本地持久性没有数据且互联网连接也不可用时.

我用这个,

addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {

                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {
                            Timber.d("Cancelled");
                        }
                    });
Run Code Online (Sandbox Code Playgroud)

我没有得到该特定场景的两个回调中的任何一个.

我应该怎么做才能解决这种情况?

Ros*_*des 8

让我们看看在没有连接时如何触发这些方法:

onCancelled - 出现服务器端错误时.例如,当用户无权访问指定节点时.(或者当你达到Sparkle计划的连接限制时).

onDataChange - 如果有数据持续存在,它将读取此数据.如果没有,则不会触发此方法(您的情况).

根据Firebase文档,如果要检查设备是否已连接到Firebase服务器,则可以添加侦听器.info/connected.像这样:

DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
connectedRef.addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot snapshot) {
    boolean connected = snapshot.getValue(Boolean.class);
    if (connected) {
      Toast.makeText(this, "Connected", Toask.LENGTH_SHORT);
    } else {
      Toast.makeText(this, "Not connected", Toask.LENGTH_SHORT).show();
    }
  }

  @Override
  public void onCancelled(DatabaseError error) {
  }
});
Run Code Online (Sandbox Code Playgroud)

  • 即使互联网可用,“connected”也是错误的 (2认同)