Firestore文档的单例设计模式

时间:2018-02-17 05:53:40

标签: android firebase google-cloud-firestore

我在Firestore的“用户”集合中为每个用户提供了一个文档。此文档还存储有关用户的一些持久状态信息,这些信息也可能因外部事件而更改。我的大多数活动都引用了这些数据,所以我决定使用单例来引用用户详细信息并附加一个监听器来通知活动,以便只使用更新的信息。我正在使用this作为我的实施模板。

public interface IUserUpdateListener
{
    void onSuccess(User user);
    void onFailure(FirebaseException e);
}

我用来处理侦听器的方法

private static List<IUserUpdateListener> _listeners = new CopyOnWriteArrayList<>();

public static void removeUserUpdateListener(final IUserUpdateListener listener)
{
    if (null != listener)
    {
        _listeners.remove(listener);
    }
}

public static void addUserUpdateListener(final IUserUpdateListener listener)
{
    if(USER_INSTANCE != null)
    {
        if (null != listener)
        {
            _listeners.add(listener);
        }

        return;
    }

    FirebaseFirestore db = FirebaseFirestore.getInstance();

    db.collection(Collections.USERS)
            .document(firebaseUser.getUid())
            .addSnapshotListener(new EventListener<DocumentSnapshot>()
            {
                @Override
                public void onEvent(DocumentSnapshot documentSnapshot, FirebaseFirestoreException e)
                {
                    if(e != null)
                    {
                        for(IUserUpdateListener listenerItem : _listeners)
                        {
                            listenerItem.onFailure(e);
                        }
                        return;
                    }

                    USER_INSTANCE = documentSnapshot.toObject(User.class);
                    for(IUserUpdateListener listenerItem : _listeners)
                    {
                        listenerItem.onUpdate(USER_INSTANCE);
                    }
                }
            });
}

如何在活动未运行时不必显式分离侦听器?此代码可能会遇到任何意外行为吗?

0 个答案:

没有答案