相关疑难解决方法(0)

在Firebase侦听器中设置Singleton属性值

我目前正在测试Firebase以及我打算在整个应用程序的生命周期中使用的Singleton模型.我现在已经陷入了一些似乎非常微不足道的事情,但我无法理解我的生活.我有一个我使用的模型示例:firebase中的书签.

public class BookSingleton {



private static BookSingleton model;

private ArrayList<BookMark> bookmarks = new ArrayList<BookMark>();


public static BookSingleton getModel()
{
    if (model == null)
    {
        throw new IllegalStateException("The model has not been initialised yet.");
    }

    return model;
}


public ArrayList<Bookmark> theBookmarkList()
{
    return this.bookmarks;
}


public void setBookmarks(ArrayList<Bookmark> bookmarks){
    this.bookmarks = bookmarks;
}


public void loadModelWithDataFromFirebase(){
    Firebase db = new Firebase(//url);
    Firebase bookmarksRef = fb.child(//access correct child);


    final ArrayList<Bookmark> loadedBookmarks = new ArrayList<Bookmark>();
    bookmarksRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot …
Run Code Online (Sandbox Code Playgroud)

java singleton android firebase firebase-realtime-database

21
推荐指数
2
解决办法
1万
查看次数

仅在firebase调用完成时加载布局

问题是:在我有机会完成调用firebase以恢复应用程序数据之前,我的MainActivity中的布局已生成.如果我旋转屏幕,从而导致onCreate在MainActivity中再次运行,则生成的一切都很好.

在我的应用程序中,我有一个Application类的自定义实现,它会对Firebase进行大量调用以恢复数据/确保数据始终保持同步.但是,我有大约20个ValueEventListener,而不是只有几个ValueEventListener,下面有大量的子代.这是为了防止我的应用程序在每次用户生成一小部分数据时几乎同步整个数据库,并避免在异步操作数据时可能发生的冲突.有趣的是,ValueEventListener实际上并没有按照它们编码的顺序获取它们的数据,所以当最后一个完成时我不能将bool设置为true.

我想知道是否有一种简单的方法来检测firebase读取是否全部完成,除了在每个侦听器的末尾放置一些代码并执行手动执行此操作的操作.我已经查看了Application类中可用的方法以及Firebase,到目前为止我还没有找到任何有效的方法.

我的Application类中的一些代码:

public class CompassApp extends Application {
Run Code Online (Sandbox Code Playgroud)

...然后在应用程序的onCreate中:

//        Fetching Data from DB.
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference dbRef = database.getReference();

//        Current User Data
    dbRef.child("currentAppData").child("workingOut").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            activeFirebaseConnections += 1;
//                Stops executing method if there is no data to retrieve
            if (!dataSnapshot.exists()) {
                return;
            }

            workingOut = dataSnapshot.getValue(boolean.class);

            activeFirebaseConnections -= 1;

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.e(TAG, "Firebase read of sleepDebt failed");
        }
    });
    dbRef.child("currentAppData").child("sleeping").addValueEventListener(new ValueEventListener() { …
Run Code Online (Sandbox Code Playgroud)

android firebase firebase-realtime-database

6
推荐指数
2
解决办法
9087
查看次数