一段时间后,Firebase onDataChange未调用打开应用程序

时间:2016-05-29 19:10:40

标签: android firebase firebase-realtime-database firebase-authentication

我正在使用Firebase Api 9。+。

编写Android应用程序

我使用Firebase身份验证和数据库。

当我访问我的应用程序并登录时,一切正常,valueEventListeners正确检索数据。

我的问题在一段时间后访问我的应用程序时开始,并且已经登录。

身份验证似乎已得到确认,但我的所有侦听器都没有被触发,似乎没有任何内容被检索到。

为了让我的应用程序再次正常工作,我必须退出并重新登录。

我不知道会话是否会过期"问题或我忘记在我的代码中写的东西。

这是我的一个valueEventListeners:

DatabaseReference myFirebase = FirebaseDatabase.getInstance().getReference();
hairDresserFirebase = myFirebase.getReference("hairDressers");
hairDresserFirebase.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot snapshot : dataSnapshot.getChildren()){
            HairDresser hd = snapshot.getValue(HairDresser.class);
            if (hairDresserList.contains(hd)) hairDresserList.remove(hd);
            hairDresserList.add(hd);
        }
        mRecyclerView.getAdapter().notifyDataSetChanged();
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
});

其他人仅为参考而改变。

它们都在onCreateView()方法中的不同片段。

这是我的splash活动的onCreate()方法执行的代码,用于验证用户是否已登录:

mAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener() {
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
        FirebaseUser user = firebaseAuth.getCurrentUser();
        if (user == null) return;
        authenticated = true;
    }
};

虽然我的登录活动仅在用户未登录并执行完整正确的程序以使用电子邮件和密码或使用Facebook登录时启动,并且工作正常。

我找不到任何解决此问题的方法,我不想强​​迫我的用户每次打开我的应用程序时重新进行身份验证。

请帮帮我:)。

1 个答案:

答案 0 :(得分:2)

您可能与Firebase失去联系。您可以通过在活动中运行此代码来监控连接来确认:

 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) {
                System.out.println("connected");
            } else {
                System.out.println("not connected");
            }
        }

        @Override
        public void onCancelled(DatabaseError error) {
            System.err.println("Listener was cancelled");
        }
    });

仅供参考 - Firebase目前存在Android身份验证问题,正在开发解决方案。请参阅Firebase状态信息中心:https://status.firebase.google.com/incident/Authentication/16001

所以我建议你等到问题得到解决。我也遇到了similar problem并且在此期间我不能做太多事情但是等等。 希望有所帮助。