【问题标题】:Read Firebase in Synchronously同步读取 Firebase
【发布时间】:2019-12-07 00:25:02
【问题描述】:

我正在尝试创建一种方法来根据我的其余代码读取我的 Firebase 数据库。我正在尝试使用可重入锁来执行此操作,但它不起作用。我希望输出为

---------- 一个
---------- 乙
---------- C
---------- D

在调用 updateMerchants() 时。无论如何我可以完成这项工作吗?

public static void updateMerchants()
{
    System.out.println("---------- A");
    lock.lock();
    DatabaseReference database = FirebaseDatabase.getInstance().getReference("users").child("merchants");
    database.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            System.out.println("---------- B");

            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                if (snapshot.exists()) {
                    System.out.println("----------exists");
                }
            }
            lock.unlock();
            System.out.println("---------- C");
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.d("onCancelled: ", databaseError.toString());
        }
    });
    updateMerchantsUtil();
}

private static void updateMerchantsUtil()
{
    lock.lock();
    System.out.println("---------- D");
    lock.unlock();
}

【问题讨论】:

  • 那么,它到底在做什么与您的预期不同?请编辑您的问题以更详细地解释。
  • 如果您的目标是尝试使数据库查询同步阻塞,那不是我推荐的策略。如果您采用异步编程技术以更好地处理 Firebase API,那就更好了。

标签: java firebase-realtime-database reentrantlock


【解决方案1】:

您可以使用CountDownLatch,如下所示:

System.out.println("---------- A");
CountDownLatch countDownLatch = new CountDownLatch(1);
@Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            System.out.println("---------- B");
            ..........
            System.out.println("---------- C");
            countDownLatch.countDown();
        }
private static void updateMerchantsUtil()
{
    countDownLatch.await();
    System.out.println("---------- D");
}

【讨论】:

    猜你喜欢
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    相关资源
    最近更新 更多