【发布时间】: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